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

时间:2012-02-11 16:41:39

标签: java android fragment

所以我正在开发一个我希望在传统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();
    }

}

1 个答案:

答案 0 :(得分:12)

使用

解决同样的问题
  

getSupportFragmentManager()

由于