加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:56:43 所属栏目:Java 来源:网络整理
导读:所以我正在开发一个我希望在传统 Android设备上运行的项目,所以我使用的是兼容性库.我使用的是类似于NewsReader的接口,只是代替Activity中的两个片段,它们嵌入在另一个嵌入ViewPagger的片段中. 为简单起见,我们将使用这些术语…… Activity - ViewPager - Co
所以我正在开发一个我希望在传统 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.

UPDATE

试图改为……

得到….

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

}

解决方法

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

getSupportFragmentManager()

谢谢

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读