片段中的Tablayout无法在导航抽屉中工作

时间:2017-03-18 08:32:25

标签: android android-fragments

我正在创建一个标签式布局作为导航抽屉活动的主片段

所以我在主要活动中将名为'test'的片段称为默认值。像

angular.js:13708 Error: [$location:nobase] http://errors.angularjs.org/1.5.7/$location/nobase
    at angular.js:38
    at sf.$get (angular.js:13384)
    at Object.invoke (angular.js:4709)
    at angular.js:4508
    at d (angular.js:4655)
    at e (angular.js:4679)
    at Object.invoke (angular.js:4701)
    at R.instance (angular.js:10234)
    at m (angular.js:9147)
    at g (angular.js:8510)

如果我再次调用此片段。像

        test home_fragment=new test();
        android.support.v4.app.FragmentManager manager=getSupportFragmentManager();
        manager.beginTransaction().replace(R.id.layout, home_fragment,home_fragment.getTag()).commit();

现在结果是tab1和tab2消失了

请参阅屏幕截图以获取更多参考资料

When opening or calling for the first time When opening or calling for the second time time

这是我的测试类(标签布局)

if (id == R.id.nav_home) {


        test home_fragment=new test();
        android.support.v4.app.FragmentManager manager=getSupportFragmentManager();
        manager.beginTransaction().replace(R.id.layout, home_fragment,home_fragment.getTag()).commit();


    }

这是我的标签式布局xml代码

 package com.hackerinside.jaisonjoseph.testapp;


 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.design.widget.TabLayout;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentPagerAdapter;
 import android.support.v4.view.ViewPager;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;

 import static android.R.attr.x;


/**
 * A simple {@link Fragment} subclass.
*/
public class test extends Fragment {




public SectionsPagerAdapter mSectionsPagerAdapter;
public ViewPager mViewPager;





public test() {


}



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    View rootView = inflater.inflate(R.layout.fragment_test, container, false);
   // View x =  inflater.inflate(R.layout.fragment_test,null);
    mSectionsPagerAdapter = new  SectionsPagerAdapter (getFragmentManager());
    mViewPager = (ViewPager) rootView.findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);
    TabLayout tabLayout = (TabLayout) rootView.findViewById(R.id.tabs);
    //Adding the tabs using addTab() method
    tabLayout.addTab(tabLayout.newTab().setText("Tab Title 1"));
    tabLayout.addTab(tabLayout.newTab().setText("Tab Title 2"));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    tabLayout.setupWithViewPager(mViewPager);

    return rootView;

}

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    private SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {


        switch (position)
        {
            case 0:

                tab1 tab1=new tab1();

                return tab1;
            case 1:

                tab2 tab2=new tab2();

                return tab2;


            default:return null;
        }



    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 2;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "SECTION 1";
            case 1:
                return "SECTION 2";

        }
        return null;
    }
}



}

1 个答案:

答案 0 :(得分:3)

试试这两个解决方案:

解决方案1 ​​

而不是

public class SectionsPagerAdapter extends FragmentPagerAdapter {

使用

public class SectionsPagerAdapter extends FragmentStatePagerAdapter {

解决方案2

使用getChildFragmentManager()代替getFragmentManager()

mSectionsPagerAdapter = new  SectionsPagerAdapter (getChildFragmentManager());