Intent传参,requestcode与resultcode
原需求:
A中有一个按钮,一个文本框,点击按钮时跳转到B中;B中有一个listview,点击listview的item,跳转到C;从C中的listview中选择,当点击listview的item时,把选择的item值回传给B,B再把值回传给A,在A中的文本框中显示出返回的值。
新增需求:
1. 在B中新添加搜索功能,一个搜索按钮,点击搜索按钮跳转到Search页面,Search页面输入关键字,然后把筛选结果显示在C的listview中,点击item,把选择的值按原路依次回传给A,在A中的文本框中显示出返回的值。
2.在C中新添加搜索功能,一个搜索按钮,点击搜索按钮跳转到Search页面,Search页面输入关键字,然后把筛选结果显示在C的listview中,点击item,把选择的值按原路依次回传给A,在A中的文本框中显示出返回的值。
遇到问题:
1.当从Search页面进入到C中时,在C页面点击后退,需要回退到B页面,但是程序退到了Search页面。
解决方法:
当点击后退按钮时在C中强制关闭Search Activity。本来想是否可以通过requestcode来来判断是从哪个Activity跳转过来的,然后根据不同的Activity来选择返回的路径。查资料后发现,requestcode 只能在startActivity/startActivityForResult页面的onActivityResult方法中判断,并不能在跳转后的Activity进行判断。
有两种方法:
a. 两个Activity
public class A extends Activity {
public static A instance = null;
@Override
protected void onCreate(BundlesavedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
.....
instance= this;
}
}
public class B extends Activity {
@Override
protected void onCreate(BundlesavedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
A.instance.finish();
}
}
b.通过ActivityManager
ActivityManager manager =(ActivityManager)getSystemService(ACTIVITY_SERVICE);
manager.restartPackage(packageName);
2.intent 回传参数时是原路返回的。比如途中黑色路线AàBàC,在C中选择值后不能直接回传值给A,而是先运行B中的onActivityResult()方法,然后在运行A中的onActivityResult()方法,即使requestCode一样也还是原路返回。
3.startActivityForResult方法启动的Activity关闭时,不setResult话,系统默认返回的resultCode是0。
4.下面一些网址是关于intent的讲解,遇到问题的参考资料,个人觉得写得挺详细的,容易理解。参考资料:
http://blog.csdn.net/donglynn/article/details/22693835
http://blog.sina.com.cn/s/blog_6afeac500100y157.html
http://blog.sina.com.cn/s/blog_533074eb01011lmg.html