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