Java 使用兼容性时从活动获取碎片事务时出现问题
所以我正在做一个项目,我想在传统的Android设备上运行,所以我在使用兼容性库。我使用了一个类似于NewsReader的界面,只是没有将两个片段嵌入到活动中,而是将它们嵌入到另一个片段中,该片段嵌入到ViewPagger中 为了简单起见,我们将使用这些术语Java 使用兼容性时从活动获取碎片事务时出现问题,java,android,fragment,Java,Android,Fragment,所以我正在做一个项目,我想在传统的Android设备上运行,所以我在使用兼容性库。我使用了一个类似于NewsReader的界面,只是没有将两个片段嵌入到活动中,而是将它们嵌入到另一个片段中,该片段嵌入到ViewPagger中 为了简单起见,我们将使用这些术语 Activity -> ViewPager -> ContainerFragment->Fragment1 ->Fragment2
Activity -> ViewPager -> ContainerFragment->Fragment1
->Fragment2
在ContainerFragment中,如果是电话,我尝试用片段2替换片段1,因此我在ContainerFragment中尝试了以下代码
import android.support.v4.app.FragmentTransaction;
...
public void onBarSelected(Integer index) {
selectedBarIndex = index;
if (isDualPane) {
// display it on the article fragment
mBarEditFragment.displayBar(index);
}
else {
// use separate activity
FragmentActivity activity = (FragmentActivity)getActivity();
FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
ft.replace(R.id.bar_container, new BarEditFragment(),R.id.bar_edit);
}
}
但是我得到了以下编译错误
Type mismatch: cannot convert from android.app.FragmentTransaction
to android.support.v4.app.FragmentTransaction
我仔细检查了一遍,活动确实扩展了兼容性碎片活动
更新
试图更改为
而且
MainActivity activity = (MainActivity)getActivity();
Object test = activity.getFragmentManager().beginTransaction();
FragmentTransaction ft = (FragmentTransaction)test;
ft.replace(R.id.bar_container, new BarEditFragment());
我得到了
java.lang.ClassCastException: android.app.BackStackRecord cannot be cast to android.support.v4.app.FragmentTransaction
有什么想法吗
答复:
我发现我的问题是,你不应该从活动中获取片段管理器,而应该从片段中获取它
这是有效的
public void onBarSelected(Integer index) {
selectedBarIndex = index;
if (isDualPane) {
// display it on the article fragment
//mBarEditFragment.displayBar(index);
}
else {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.bar_container, new BarEditFragment());
ft.commit();
}
}
面对同样的问题,使用 getSupportFragmentManager()
谢谢您是否也检查了您正在将支持库导入ContainerFragment中?另外,在ft.replace()之后,您确实应该调用ft.commit(),即。“导入android.support.v4.app.FragmentTransaction”而不是“导入android.app.FragmentTransaction”。是的,我是…导入android.support.v4.app.FragmentTransaction;Dianne Hackborn说嵌入片段可能导致以下问题:。出于这个原因,我会避免这样做……好吧,那是一个地方。在没有看到所有代码的情况下,出现的编译错误表明您正在导入标准FragmentTransaction,而不是support FragmentTransaction。正如斯科特指出的那样,你在另一个片段中嵌入了一个片段很可能就是这个原因。你能进一步解释一下吗