【问题标题】:Android Fragment Transaction wrong argument, fragment, should be of type android.support.v4.app.FragmentAndroid Fragment Transaction 参数错误,fragment,应该是 android.support.v4.app.Fragment 类型
【发布时间】:2023-03-03 06:31:20
【问题描述】:

在我的应用程序中,我的主 Activity 实现了在两个片段之间切换的 TabLayout。它们的处理方式如下:

private class PagerAdapter extends FragmentPagerAdapter {

        PagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return position == 0 ? Tab1Frag.getInstance()
                    : Tab2Frag.getInstance();
        }

        @Override
        public int getCount() {
            return 2;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return position == 0 ? "Tab1" : "Tab2";
        }
    }

它们(这些片段)都实现自

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager

否则我不能以这种方式使用它们。

一切正常,但现在我面临这个问题。我有时想通过以下方法将 Tab1 片段更改为不同的片段:

private void replaceFragment(int code) { FragmentTransaction ft = getFragmentManager().beginTransaction();

    if(code==0){
        ViewListElementFrag fragment = new ViewListElementFrag ();
        ft.replace(R.id.fragmentFrame, fragment, ViewListElementFrag.TAG);
    }
    else if(code==1){
        EditElementFragment fragment = new EditElementFragment ();
        ft.replace(R.id.fragmentFrame, fragment, EditElementFragment.TAG);
    }
    ft.commit();
}

这正常工作,但现在面临问题。

FragmentTransaction ft = getFragmentManager().beginTransaction();

必须是 appv4,但它不允许替换标准 android.app.fragment 中的片段。我怎样才能让它工作,所以我的标签布局中的片段可以被不同的片段替换?还是我需要使用新的活动?

谢谢你 格热戈日

编辑:

解释一下。在行中

 ft.replace(R.id.fragmentFrame, fragment, FragmentWhatever.TAG);

我得到第二个参数片段的错误应该是 android.suppotr.v4.app.Fragment 类型

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    而不是:

    FragmentTransaction ft = getFragmentManager().beginTransaction();
    

    使用支持库:

    FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
    

    还要确保导入:

    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentTransaction;
    

    【讨论】:

    • 我确实导入了 android.support.v4.app.Fragment;导入 android.support.v4.app.FragmentManager;导入 android.support.v4.app.FragmentTransaction;并且 getSupportManager() 没有解决。
    • 我已经编辑了我的问题,这并不能解决它。你能看一下吗?
    • ur ViewListElementFrag , EditElementFragment.. 这个片段类必须使用.. import android.support.v4.app.Fragment;
    【解决方案2】:

    你也可以用它来替换片段

    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.fragmentFrame, fragment).commit();
    

    【讨论】:

    • 导入android.support.v4.app.Fragment;导入 android.support.v4.app.FragmentManager;导入android.support.v4.app.FragmentTransaction;我做了这些,但方法 getSupportManager() 没有解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    相关资源
    最近更新 更多