【问题标题】:Problems getting FragmentTransaction from activity while using Compatibility使用兼容性时从活动中获取 FragmentTransaction 的问题
【发布时间】:2012-02-11 16:41:38
【问题描述】:

所以我正在开发一个想要在旧版 Android 设备上运行的项目,因此我使用了兼容性库。我正在使用类似于 NewsReader 的接口,只是不是将两个 Fragment 放在 Activity 中,而是嵌入在另一个 Fragment 中,该 Fragment 嵌入在 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 管理器,而应该从 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();
    }

}

【问题讨论】:

  • 您是否还检查过您正在将支持库导入到 ContainerFragment 中?另外,在 ft.replace() 之后,你真的应该调用 ft.commit()。
  • 即“import android.support.v4.app.FragmentTransaction”而不是“import android.app.FragmentTransaction”。
  • 是的,我是...import android.support.v4.app.FragmentTransaction;
  • Dianne Hackborn 说嵌入片段可能会导致问题:stackoverflow.com/questions/6221763/…。出于这个原因,我会避免这样做......
  • 好的,这是一个地方。在没有看到所有代码的情况下,您获得的编译错误表明您正在某个地方导入标准 FragmentTransaction 而不是支持 FragmentTransaction。正如 Scott 指出的那样,您使用将 Fragment 嵌入另一个 Fragment 很可能是造成这种情况的原因。

标签: java android fragment


【解决方案1】:

面对同样的问题用

解决了

getSupportFragmentManager()

谢谢

【讨论】:

  • 您能否进一步解释一下。我面临同样的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
  • 1970-01-01
  • 2016-08-28
  • 2014-02-12
  • 2011-10-04
  • 2013-03-28
相关资源
最近更新 更多