Android Fragment Transaction错误的参数,片段,应该是android.support.v4.app.Fragment

时间:2017-08-02 18:26:20

标签: android android-fragments

在我的应用程序中,我有一个主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替换片段。我怎样才能使它工作,所以我可以用不同的片段替换标签布局中的片段?或者我是否需要使用新活动?

先谢谢你 的Grzegorz

编辑:

解释。在行

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

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

2 个答案:

答案 0 :(得分:1)

而不是:

[-2.0, 1.0, 3.5, 4.0]

使用支持库:

FragmentTransaction ft = getFragmentManager().beginTransaction();

还要确保导入:

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

答案 1 :(得分:0)

您也可以使用它来替换片段

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