intent,requesrcode,resultcode开发总结

来源:互联网 发布:专业房屋设计软件 编辑:程序博客网 时间:2024/06/11 00:07

Intent传参,requestcode与resultcode

 

原需求:

A中有一个按钮,一个文本框,点击按钮时跳转到B中;B中有一个listview,点击listview的item,跳转到C;从C中的listview中选择,当点击listview的item时,把选择的item值回传给B,B再把值回传给A,在A中的文本框中显示出返回的值。

新增需求:

1.  B中新添加搜索功能,一个搜索按钮,点击搜索按钮跳转到Search页面,Search页面输入关键字,然后把筛选结果显示在Clistview中,点击item,把选择的值按原路依次回传给A,在A中的文本框中显示出返回的值。

 

2.在C中新添加搜索功能,一个搜索按钮,点击搜索按钮跳转到Search页面,Search页面输入关键字,然后把筛选结果显示在Clistview中,点击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

 

0 0