使用兼容性时从活动中获取FragmentTransaction的问题

Jac*_*kie 3 java android fragment

所以我正在开发一个我希望在传统Android设备上运行的项目,所以我使用的是兼容性库.我使用的是类似于NewsReader的接口,只是代替Activity中的两个片段,它们嵌入在另一个嵌入ViewPagger的片段中.

为简单起见,我们将使用这些术语......

Activity -> ViewPager -> ContainerFragment->Fragment1
                                          ->Fragment2
Run Code Online (Sandbox Code Playgroud)

在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);
    }

}
Run Code Online (Sandbox Code Playgroud)

但是我得到以下编译错误

Type mismatch: cannot convert from android.app.FragmentTransaction 
 to android.support.v4.app.FragmentTransaction
Run Code Online (Sandbox Code Playgroud)

我仔细检查了一下,活动确实扩展了兼容性FragmentActivity.

UPDATE

试图改为......

得到....

MainActivity activity = (MainActivity)getActivity();
Object test = activity.getFragmentManager().beginTransaction();
FragmentTransaction ft = (FragmentTransaction)test;
ft.replace(R.id.bar_container, new BarEditFragment());
Run Code Online (Sandbox Code Playgroud)

我得到了......

java.lang.ClassCastException: android.app.BackStackRecord cannot be cast to android.support.v4.app.FragmentTransaction
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

回答:

我想出了我的问题问题是你不应该从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();
    }

}
Run Code Online (Sandbox Code Playgroud)

san*_*ndy 12

面对同样的问题解决了使用

getSupportFragmentManager()

谢谢