作者andy13579372 (唐唐)
看板AndroidDev
标题Re: [问题] Fagment 画面切换问题
时间Sat Apr 20 23:14:51 2013
之前也有遇到一模一样的问题
GOOGLE了挺久又把supportv4.TabManager、TabHost一行一行看
推得的结论是support包的bug(猜测~)
修改方式:
TabManager中将约第90行的
ft.add(mContainerId, newTab.fragment, newTab.tag);
注解掉。
上下文:
if (newTab != null) {
newTab.fragment = Fragment.instantiate(mActivity,
newTab.clss.getName(), newTab.args);
ft.add(mContainerId, newTab.fragment, newTab.tag);
if (newTab.fragment == null) {
ft.detach(mLastTab.fragment);
} else {
mActivity.getSupportFragmentManager().popBackStack();
ft.replace(mContainerId, newTab.fragment);
ft.attach(newTab.fragment);
}
------------------------------------------------------------------------
推测原因说明:
FragmentTransaction ft有replace、add函式,
而replace包含的功能有remove和add,
且若add同一个fragment两次就会跳出如你的错误讯息。
看你的code注解掉的那行是一行add,
往下数5行是replace,
在你会当掉的那个动作这两个函式都会用到,
但已经add过了因此会在replace的地方崩溃~
虽然之前没看到官方正式的bug通知或更新,
不过在网路上有看到好像就是在说这是bug的英文讨论(英文差-.-)
我注解掉後使用上也完全没有问题
请尝试後放心使用罗=ˇ=
※ 引述《loveyoualway (疯子)》之铭言:
: 我有一个 FragmentActivity 加了2个页签 A.class 和 B.class
: mTabManager.addTab(getmTabHost().newTabSpec("Fragment1").setIndicator("A",this.getResources().getDrawable(R.drawable.tabbar1)),
: A.class, null);
: mTabManager.addTab(getmTabHost().newTabSpec("Fragment2").setIndicator("B",this.getResources().getDrawable(R.drawable.tabbar2)),
: B.class, null);
: 当我在 A.class里面 在设置跳到另一个fragment C.class
: button.setOnClickListener(new OnClickListener(){
: @Override
: public void onClick(View v)
: Fragment newFragment = new C();
: android.support.v4.app.FragmentTransaction ft = getActivity()
: .getSupportFragmentManager().beginTransaction();
: ft.replace(R.id.realtabcontent, newFragment);
: ft.setTransition(FragmentTransaction.TRANSIT_NONE);
: ft.addToBackStack(null);
: ft.commit();
: }
: });
: 以上都正常 但是跳至C.class後 又按页签B 他就会出现错误
: java.lang.IllegalStateException: Fragment already added: imformation{40dc8148
: #3 id=0x1010000 Fragment2}
: 请问这如何解压 有大大碰到这样情况过吗????
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.251.167
1F:推 loveyoualway:成功了 谢谢大大!!! 04/22 12:47