Activity 跳转到Fragment中(MainActivity中的Fragment)

                                     Activity 跳转到Fragment中(备注:MainActivity中的Fragment)

    如果大家有遇到这个问题 说明你来对了 楼主我可是踩了无数的坑,花了几天的时间才把这篇文章写下 

    现在App的模式一般都是Activity中多Fragment的模式 所以可能会有这种需求 就是Activity中需要跳转到Fragment中的情况

    首先 MainActivity中有4个Fragment(FragementA,FragmentB,FragmentC,FragmentD ) 其中项目有需求 需要ActivityA 

    跳转到FragmentA 中 有的人就会说了 很简单吗 直接跳转到FragmentA中就可以了撒。

    那我就直接呵呵你一脸 要是这么简单

    我需要写一遍文章来记录不  既然出现了Fragment 那肯定需要FragmentManager 和FragmentTransaction,一个是Fragment管理器

    一个Fragment开启事物的。

     因此大部分网上的资料都是这样叫你这样的写法:

    FragmentManager fm=getSupportFragmentManager();
    FragmentTransaction ft=fm.beginTransaction();
    xxFragment xx=new xxFragment();
    ft.replace(R.ic.content,xx);
    ft.commit();

   我之前也是这么做的 发现老是报id 找不到 所以我放弃了 后面知道原因了  嘿嘿 留个悬链;
   所以我就换了一种思路  直接由Activity中跳转到MainActivity 然后通过MainActivity中来控制FragmentA的add或者replace();

   Intent intent = new Intent(getActivity(), MainActivity.class);
   intent.putExtra("id", 1);
   startActivity(intent);
   getActivity().finish();
   int id = intent.getIntExtra("id", 0);
    if (id == 1) {
            tb.switchContent(homeFragment);
       } 
    恩 这个页面我传了一个ID  
    在MainActivity中我 我接收了这个ID来作为判断的条件 
    然后发现传递传递过来了 但是又出现了一个bug 在MainActivity中出现了回退栈(因为MainActivit的起名模式是stand)
    回退栈的意思就是 你按下的顺序 activityA->activityB->activityC   然后你按下返回键的时候 就C->B->A  在这里我是不需要回退的 
    所以我把MainActivity的实列设置我singleInstance 意思就是只要有一个实列  但是这样又出现问题了 发现设置MainActivity的启动
   模式是singlestance 这里出现了一个bug 。bug就是居然跳转不了了  后面网上查资料 要在MainActivity中重新onNewIntent()的方法
    在这个方法里面做判断

@Override
    protected void onNewIntent(Intent intent) {
        // TODO Auto-generated method stub
        super.onNewIntent(intent);
        int id = intent.getIntExtra("id", 0);
        if (id == 1) {
            tb.switchContent(homeFragment);
        }
}

这样就解决了 无法跳转的问题 并且也不会有回退栈了。 至于我的 这个tb.switchConten(homeFragment)的这个方法 很简单的了 其实就是:

  FragmentManager fm=getSupportFragmentManager();
  FragmentTransaction ft=fm.beginTransaction();
  xxFragment xx=new xxFragment();
  ft.replace(R.ic.content,xx);
  ft.commit(); 
   哈哈 其实网上的资料是没有错了 只是之前我理解错了 这个ID 是MainActivity中的 ID
  而且必须要是Framlayout中的ID 之前我一直设置为是跳转的FragmentA中的ID 所以报错的原因也就是当然ID就找不到了
  这个错误犯的真心冤枉  辛亏 后面还是圆满解决了 并且也学到了很多的新的东西 就比如这个onNewIntent()的方法
  这个方法也只要在启动模式为SingleTask 和SingleInstance的情况下 跳转的时候需要重写这个方法 才能接收到intent传过来地方  值。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值