所以我正在开发一个我希望在传统Android设备上运行的项目,所以我使用的是兼容性库。我使用的是类似于NewsReader的接口,只是代替Activity中的两个片段,它们嵌入在另一个嵌入ViewPagger的片段中。
为简单起见,我们将使用这些术语......
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
我仔细检查过,活动确实扩展了兼容性FragmentActivity。
更新
试图改为......
得到了......
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
有什么想法吗?
解答:
我想出了我的问题问题是你不应该从Activity中获取Fragment管理器,而应该从片段中获取它。
这有效....
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();
}
}
答案 0 :(得分:12)
使用
解决同样的问题getSupportFragmentManager()
由于