android中的传值(5种)

Posted 双间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android中的传值(5种)相关的知识,希望对你有一定的参考价值。

 

地址: https://blog.csdn.net/rely_on_yourself/article/details/81539986

 

 

android开发中,在不同模块(如Activity)间经常会有各种各样的数据需要相互传递,我把常用的几种 
方法都收集到了一起。它们各有利弊,有各自的应用场景。 
我现在把它们集中到一个例子中展示,在例子中每一个按纽代表了一种实现方法。

效果图: 
这里写图片描述

Demo地址:https://download.csdn.net/download/rely_on_yourself/10595099

1. 利用Intent对象携带简单数据

利用Intent的Extra部分来存储我们想要传递的数据,可以传送String , int, long, char等一些基础类型,对复杂的对象就无能为力了。

1.1 设置参数

            //传递些简单的参数
             Intent intent1 = new Intent();
             intent1.setClass(MainActivity.this,SimpleActivity.class);

             //intent1.putExtra("usr", "lyx");
             //intent1.putExtra("pwd", "123456");
             //startActivity(intent1);

             Bundle bundleSimple = new Bundle();
             bundleSimple.putString("usr", "lyx");
             bundleSimple.putString("pwd", "123456");
             intent1.putExtras(bundleSimple);

             startActivity(intent1);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

1.2接收参数

          //接收参数

           //Intent intent = getIntent();
           //String eml = intent.getStringExtra("usr");
           //String pwd = intent.getStringExtra("pwd");

           Bundle bundle = this.getIntent().getExtras();
           String eml = bundle.getString("usr");
           String pwd = bundle.getString("pwd");
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这种情况下 , 有些童鞋喜欢直接用intent传递数据 , 不经过bundle来传递数据 . 其实这两种方式没有区别的 , 查看Intent 的源码就会发现 , 其实intent1.putExtra也是通过bundle来传递 . 具体的讲解可以参考这位童鞋的分享 , 我觉得挺清晰的 , 地址:https://www.cnblogs.com/jeffen/p/6835622.html

2. 利用Intent对象携带如ArrayList之类复杂些的数据

这种原理是和上面一种是一样的,只是要注意下。 在传参数前,要用新增加一个List将对象包起来。

2.1 设置参数

        //传递复杂些的参数
        Map<String, Object> map = new HashMap<>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        List<Map<String, Object>> list = new ArrayList<>();
        list.add(map);

        Intent intent = new Intent();
        intent.setClass(MainActivity.this,ComplexActivity.class);
        Bundle bundle = new Bundle();
        //须定义一个list用于在budnle中传递需要传递的ArrayList<Object>,这个是必须要的
        ArrayList bundlelist = new ArrayList();
        bundlelist.add(list);
        bundle.putParcelableArrayList("list",bundlelist);
        intent.putExtras(bundle);
        startActivity(intent);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2.2 接收参数

    this.setTitle("复杂参数传递例子");

    //接收参数
     Bundle bundle = getIntent().getExtras();
     ArrayList list = bundle.getParcelableArrayList("list");
    //从List中将参数转回 List<Map<String, Object>>
     List<Map<String, Object>> lists= (List<Map<String, Object>>)list.get(0);

     String sResult = "";
       for (Map<String, Object> m : lists) {
           for (String k : m.keySet()) {
               sResult += "\\r\\n" + k + " : " + m.get(k);
           }
       }

    TextView  tv = findViewById(R.id.tv);
    tv.setText(sResult);