Android开发使用Intent传递复杂数据(List集合,Map等)

Intent(意图)在Android开发中是用于在各个Activity之间传输数据用的。它可传输的数据形式主要有以下几种:

1、简单数据。(使用Bundle即可)

2、数组。

3、List集合。

4、Map<String, Object>。(可以放在一个List集合里传输)

5、对象(对象之类的,可以放在一个List集合里传输)

综上所述,使用List集合还是比较全面的。(下面这个实例中,最主要的就是:List集合中Object类需要实现Serializable接口,如下面代码中的Tb_ItemBean就需要实现Serializable接口。)

首先,第一个界面MainActivity.java的主要代码如下:

package com.deepreality.intentdemo;

import android.content.Intent;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    public List<Tb_ItemBean> tbItemBeanList;
    public List<Map<String, Object>> mapList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //listDataInit();
        listDataInit_1();

    }

    private void listDataInit() {
        tbItemBeanList = new ArrayList<>();
        for (int i = 0; i < 5; i ++) {
            Tb_ItemBean tb_itemBean = new Tb_ItemBean("fileName" + String.valueOf(i + 1), String.valueOf(i + 1));
            tbItemBeanList.add(tb_itemBean);
        }
        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
        Bundle bundle = new Bundle();
        bundle.putSerializable("tbItemBeanList", (Serializable) tbItemBeanList);
        intent.putExtras(bundle);
        startActivity(intent);
    }

    private void listDataInit_1() {
        mapList = new ArrayList<>();
        for (int i = 0; i < 5; i ++) {
            Map<String, Object> map = new HashMap<>();
            map.put("value" + String.valueOf(i + 1), "第" + String.valueOf(i + 1) + "_1个值");
            map.put("value" + String.valueOf(i + 1), "第" + String.valueOf(i + 1) + "_2个值");
            mapList.add(map);
        }

        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
        Bundle bundle = new Bundle();
        bundle.putSerializable("tbItemBeanList", (Serializable) mapList);
        intent.putExtras(bundle);
        startActivity(intent);
    }
}

第二个接收数据的界面SecondActivity.java的代码如下:

package com.deepreality.intentdemo;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class SecondActivity extends AppCompatActivity {

    public List<Tb_ItemBean> tbItemBeanList;
    public List<Map<String, Object>> mapList;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //resultShow_1();
        resultShow_2();
    }

    private void resultShow_1() {
        tbItemBeanList = new ArrayList<>();

        Intent intent = getIntent();
        Bundle bundle = intent.getExtras();
        tbItemBeanList = (List<Tb_ItemBean>) bundle.getSerializable("tbItemBeanList");
        Log.e("结果", tbItemBeanList.get(1).get_fileName());
    }

    private void resultShow_2() {
        mapList = new ArrayList<>();

        Intent intent = getIntent();
        Bundle bundle = intent.getExtras();
        mapList = (List<Map<String, Object>>) bundle.getSerializable("tbItemBeanList");
        Log.e("结果", mapList.get(1).get("value2").toString());
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}

输出结果:


猜你喜欢

转载自blog.csdn.net/lpcrazyboy/article/details/80881055