android中的传值(5种)

【android中的传值(5种)】男儿欲遂平生志,五经勤向窗前读。这篇文章主要讲述android中的传值(5种)相关的知识,希望能为你提供帮助。
 
地址:  https://blog.csdn.net/rely_on_yourself/article/details/81539986
 
 
android开发中,在不同模块(如Activity)间经常会有各种各样的数据需要相互传递,我把常用的几种 
方法都收集到了一起。它们各有利弊,有各自的应用场景。 
我现在把它们集中到一个例子中展示,在例子中每一个按纽代表了一种实现方法。
效果图: 

android中的传值(5种)

文章图片

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); } }TextViewtv = findViewById(R.id.tv); tv.setText(sResult);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

    推荐阅读