android从fragment跳转到fragment问题解决

  背景:今天遇到一个问题,虽然不是很小但是也不是很大,就是从fragmentA准确的跳到fragmentB去,还有就是从Activity准确的跳到fragment 去,后面这个问题让我想了好半天,最后还是处理了,处理这个问题就不要用广播去传值解决了,因为会出现……  after on saveInstance错误。

     处理1:fragment跳到fragment的问题

    Fragment跳到fragment如果中间不经过切换两个或两个以上的宿主Activity的话是很简单的,但是如果中间要更换宿主Activity这也能解决。

     先解决不经过切换宿主activity跳转的fragment的跳转,比如在主页面就会经常用到几个fragment相互切换,当然用fragment的回退栈也可以,但是如果不按顺序去跳转呢,而且底部图标跟着变化呢,是不是会很麻烦呢。还是使用简单的方法吧。
以MainActivity由几个fragment组成为例,要相互跳转,先在宿主MainActivity里面写一个public方法:

  1. private FragmentManager fmanager;  
  2. private FragmentTransaction ftransaction;  
  3. public void gotoDownloadFragment() {    //去下载页面  
  4.     fmanager = getSupportFragmentManager();  
  5. ftransaction = fmanager.beginTransaction();  
  6. mDownloadFragment = new DownloadFragment();  
  7. ftransaction.replace(R.id.rl_fragment_container, mDownloadFragment);  
  8. ftransaction.commit();  
  9. }  


这个方法就是MainActivity调用其他几个fragment的方法,我比如我现在PersonFragment要去DownloadFragment,中间隔着好几个其他Fragment,我只要在PersonFragment中获取宿主的getActivity(),去调用宿主里面的方法即可。

  1. MainActivity  mainActivity = (MainActivity) getActivity();  
  2. mainActivity. gotoDownloadFragment ();  

对,就这样就切换到了DownLoadFragment,是不是很简单。

    处理2:现在解决需要切换两个不同宿主Activity中的两个fragment之间进行切换。

    这儿就得使用startActivityForResult()了,startActivityForResult的主要作用就是它可以回传数据,假设我们有两个页面,首先进入第一个页面,里面有一个按钮,用于进入下一个页面,当进入下一个页面时,进行设置操作,并在其finish()动作或者back动作后,将设置的值回传给第一个页面,从而第一个页面来显示所得到的值。这个有一点像回调方法,就是在第二个页面finish()动作或者back动作后,会回调第一个页面的onActivityResult()方法。不明白可以参考网址:http://www.jb51.net/article/47599.htm

    举个例子就知道了:

    首先我们的目的:BActivity中的BourFragment点击跳转按钮跳转到MainActivity中的DownloadFragment。

    我现在找一个入口是从MainActivity中的PersonFragment要跳转到BActivity中的BourFragment,然而我们的目的是从BourFragment点击跳转到MainActivity中的DownloadFragment。一定要理清这个逻辑,耐心看。

    这个相当于是跑了一圈似的,但是首先要明确我们的目的。我提供的入口是PersonFragment,当然也可以是MainActivity中的任意fragment,这仅仅是个例子。

    首先,我们在PersonFragment中使用startActivityForResult的方式跳转它的宿主Activity:

  1. startActivityForResult(new Intent(context,BActivity.class),1); //requestcode设的是1  
    然后在BourFragment中给跳转按钮中这样写:
  1. BActivity bActivity= (BActivity) getActivity();  
  2. bActivity. onSetResult ();  

这样,一为了响应PersonFragment,二是为了finish掉BActivity,这样岂不是又回到了MainActivity中,然后入口是PersonFragment,BActivity被finish掉之后,出口自然也是PersonFragment,因为这个fragment的状态未被销毁掉,这个你可以参考:http://blog.csdn.net/wenxuzl99/article/details/16112725

    最后,既然又回到MainActivity中的PersonFragment了,我只要在这里重写onActivityResult方法判断需求码和结果码就可以回到DownloadFragment了。当然一定要记得,在MainActivity中定义跳转到DownloadFragment的public void gotoDownloadFragment()方法。
  1. private MainActivity mainActivity;  
  2. @Override  
  3. public void onActivityResult(int requestCode, int resultCode, Intent data) {  
  4.     super.onActivityResult(requestCode, resultCode, data);  
  5.     if (requestCode == 1 && resultCode == 2) {  
  6.         mainActivity = (MainActivity) getActivity();  
  7.         mainActivity. gotoDownloadFragment ();  
  8.     }   
  9. }  

    大功告成了!终于解决了,fragment之间相互跳转的难题了。

    下一节说一下,要经过好几个Activity的跳转,从AActivity->BActivity ->CActivity一直跳转之后,再从CActivity中跳转到AActivity的DownloadFragment里面。可以先思考一下,然后再参考我的思路。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值