Jaison_Joseph
Jaison_Joseph

Reputation: 333

Tablayout in Fragment not working in Navigation Drawer

I am creating a tabbed layout as home fragment of navigation drawer activity,

so i called fragment named 'test' as default in main activity. like

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

if i call this fragment again . like

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


    }

now the result is tab1 and tab2 are gone

See the screenshot for more reference

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

this is my test class( tabbed layout)

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



}

this is my tabbed layout xml code

   <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/main_content"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:fitsSystemWindows="true"
  tools:context="com.hackerinside.jaisonjoseph.testapp.MainActivity"
  android:orientation="vertical">

  <android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">


      <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />


   </LinearLayout>

Upvotes: 2

Views: 719

Answers (1)

rafsanahmad007
rafsanahmad007

Reputation: 23881

Try this two solution:

Solution 1

instead of

public class SectionsPagerAdapter extends FragmentPagerAdapter {

use

public class SectionsPagerAdapter extends FragmentStatePagerAdapter {

Solution 2

use getChildFragmentManager() instead of getFragmentManager()

mSectionsPagerAdapter = new  SectionsPagerAdapter (getChildFragmentManager());

Upvotes: 5

Related Questions