Java 使用兼容性时从活动获取碎片事务时出现问题

Java 使用兼容性时从活动获取碎片事务时出现问题,java,android,fragment,Java,Android,Fragment,所以我正在做一个项目,我想在传统的Android设备上运行,所以我在使用兼容性库。我使用了一个类似于NewsReader的界面,只是没有将两个片段嵌入到活动中,而是将它们嵌入到另一个片段中,该片段嵌入到ViewPagger中 为了简单起见,我们将使用这些术语 Activity -> ViewPager -> ContainerFragment->Fragment1 ->Fragment2

所以我正在做一个项目,我想在传统的Android设备上运行,所以我在使用兼容性库。我使用了一个类似于NewsReader的界面,只是没有将两个片段嵌入到活动中,而是将它们嵌入到另一个片段中,该片段嵌入到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
我仔细检查了一遍,活动确实扩展了兼容性碎片活动

更新

试图更改为

而且

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。正如斯科特指出的那样,你在另一个片段中嵌入了一个片段很可能就是这个原因。你能进一步解释一下吗