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传过来地方  值。