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方法:

private FragmentManager fmanager;
private FragmentTransaction ftransaction;
public void gotoDownloadFragment() {    //去下载页面
    fmanager = getSupportFragmentManager();
ftransaction = fmanager.beginTransaction();
mDownloadFragment = new DownloadFragment();
ftransaction.replace(R.id.rl_fragment_container, mDownloadFragment);
ftransaction.commit();
}


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

MainActivity  mainActivity = (MainActivity) getActivity();
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:

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

BActivity bActivity= (BActivity) getActivity();
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()方法。

private MainActivity mainActivity;
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1 && resultCode == 2) {
        mainActivity = (MainActivity) getActivity();
        mainActivity. gotoDownloadFragment ();
    } 
}

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

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

   下一篇:【Android 解决Activity跳转到任意Fragment的问题,或多层次Activity跳转解决问题】

纪实:2016.01.24







评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值