开发中遇到多个activity的传值问题 相邻两个之间的传值 或者多个三个以上之间的传值问题 但是很多同学这方面经验还是不足,说下常用的开发场景
1 一般的注册或者添加某项信息界面就会遇activity传值问题
2 比如我在一个界面提交新息 需要打开一个新的界面选择里面的信息回到当前activty的时候
现在说下比较经典的四种比较经典的传值方法
一 如果是两个相邻activity之间的传值:
可以用Intent传值 对象和单个属性都可以都可以
- Intent intent =new Intent(AActivity.this,bActivty.class);//
- // 可以这样
- intent.putExtra("name", "sss");
- intent.putExtra("age", 22);
- // 也可以直接用bundle放对象
- Bundle bundle =new Bundle();
- bundle.putString("name", "ss");
- bundle.putInt("age", 22);
- intent.putExtras(bundle);
二:相邻两个以上的activty之间的传值
可以照搬方法一 但是比较笨拙 界面一多初学者就会晕了
首先可以自定义个Application
<pre name="code" class="java"><pre name="code" class="java">public class MyApplication extends Application{ public static User user=null; }
定义你需要传递的对象或者属性 在A中拿到user 去实例化赋值 然后再除了A的任何一个Activity中去取值使用 如果你的信息比较多 需要每个界面添加不同的信心个这个对象USER 你可以拿到这个user不断去set属性值 到你最后一个界面使用的时候去取值使用就ok ,是不是挺方便》
这种思维也可以拓展为 数据库 网络服务器 或者xml 进行中转 如果只是临时不是持久储存就不必用这种方法了
三 如果是A 界面调到B界面 拿到user的name或者age 需要回到当前A的情况下
1 在A 中使用
startActivityForResult(intent,code);
code是返回码数 int
此方法跳到B
2 B可以使用finsh之前 将user或者某个属性扔给A
3 A使用 onActivityResult方法接受此intent
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- // TODO Auto-generated method stub
- user.setName(data.getStringExtra("name"))
- Toast.makeText(this, data.getStringExtra("name"), 1).show();//得到返回的user
此name只是一个key - super.onActivityResult(requestCode, resultCode, data);
- }
四
使用回调
大致步骤
在B中的定义一个回调接口
A中去实现这个接口原型 B中去将你需要传的值(例如name)放到接口了 B中执行此接口方法就OK 这样A 就拿到了user了
回调的功能不值这一点哦啊 可以在任何类里使用回调哦啊
方法二也适用与任何类
回调具体请看
http://blog.csdn.net/sk719887916/article/details/40543483
回调详解