Android: TabLayout not showing any tabs -


first time working com.android.support:design:23.1.1, , having issues getting tablayout work.

my app set such:

  • one main activity called landingactivity has drawerlayout menu items in it.

  • when selecting menu item, load different fragments framelayout in landingactivity.

  • some of loaded fragments should show tabs @ top, shouldn't.

my issue is, on fragment supposed show tabs @ top, has space in nav bar should have tabs there, nothing shows.

code:

activity_landing.xml

<android.support.v4.widget.drawerlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent">  <!-- linearlayout represents contents of screen  --> <linearlayout     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical">      <!-- actionbar displayed @ top -->     <include         layout="@layout/tool_bar"         android:layout_width="match_parent"         android:layout_height="wrap_content" />      <!-- main content view fragments loaded -->     <framelayout         android:id="@+id/flcontent"         android:layout_width="match_parent"         android:layout_height="match_parent" /> </linearlayout>  <!-- navigation drawer comes left --> <!-- note `android:layout_gravity` needs set 'start' --> <android.support.design.widget.navigationview     android:id="@+id/nvview"     android:layout_width="wrap_content"     android:layout_height="match_parent"     android:layout_gravity="start"     android:background="@android:color/white"     app:menu="@menu/drawer" /> 

landingactivity load fragments:

 public void selectdraweritem(menuitem menuitem) {     // create new fragment , specify planet show based on     // position     fragment fragment = null;      switch(menuitem.getitemid()) {         case r.id.drawer_home:             fragment = homefragment.newinstance();             break;         case r.id.drawer_customize:             fragment = customizefragment.newinstance();             break;         default:             fragment = homefragment.newinstance();     }      // insert fragment replacing existing fragment     fragmentmanager fragmentmanager = getsupportfragmentmanager();     fragmentmanager.begintransaction().replace(r.id.flcontent, fragment).commit(); 

home_fragment.xml (one has tabs)

<android.support.design.widget.appbarlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent">  <android.support.design.widget.tablayout     android:id="@+id/tablayout"     android:layout_width="match_parent"     android:layout_height="wrap_content"     app:tabmode="fixed"     app:tabgravity="fill"    />  <android.support.v4.view.viewpager     android:id="@+id/viewpager"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:background="@android:color/white"/> 

homefragment.java

public class homefragment extends fragment {  public static homefragment newinstance() {     bundle args = new bundle(); alreadyselectedfollowinginfo);      homefragment fragment = new homefragment();     fragment.setarguments(args);     return fragment; }  public homefragment() {  }  @override public view oncreateview(layoutinflater inflater, viewgroup container,                          bundle savedinstancestate) {      final view v = inflater.inflate(r.layout.fragment_home, container, false);      final tablayout tablayout = (tablayout) v.findviewbyid(r.id.tablayout);     tablayout.addtab(tablayout.newtab().settext("one"));     tablayout.addtab(tablayout.newtab().settext("two"));     final viewpager viewpager = (viewpager) v.findviewbyid(r.id.viewpager);      viewpager.setadapter(new pageradapter             (getfragmentmanager(), tablayout.gettabcount()));     viewpager.addonpagechangelistener(new tablayout.tablayoutonpagechangelistener(tablayout));     tablayout.setontabselectedlistener(new tablayout.ontabselectedlistener() {         @override         public void ontabselected(tablayout.tab tab) {             viewpager.setcurrentitem(tab.getposition());         }          @override         public void ontabunselected(tablayout.tab tab) {          }          @override         public void ontabreselected(tablayout.tab tab) {          }     });      tablayout.post(new runnable() {         @override         public void run() {             tablayout.setupwithviewpager(viewpager);         }     });      return inflater.inflate(r.layout.fragment_home, container, false); }  public class pageradapter extends fragmentstatepageradapter {     int mnumoftabs;      public pageradapter(fragmentmanager fm, int numoftabs) {         super(fm);         this.mnumoftabs = numoftabs;     }      @override     public fragment getitem(int position) {          switch (position) {             case 0:                 blogfragment tab1 = blogfragment.newinstance();                 return tab1;             case 1:                 trendingfragment tab2 = trendingfragment.newinstance();                 return tab2;             default:                 return null;         }     }      @override     public int getcount() {         return mnumoftabs;     } } 

}

might not relevant, tool_bar.xml used in activity_landing.xml

<android.support.v7.widget.toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:fitssystemwindows="true" android:minheight="?attr/actionbarsize" app:theme="@style/themeoverlay.appcompat.dark.actionbar" android:background="?attr/colorprimary"> 

that's i've got. can't figure out what's going on.

what looks now

edit:

new code:

@override public view oncreateview(layoutinflater inflater, viewgroup container,                          bundle savedinstancestate) {      final view v = inflater.inflate(r.layout.fragment_home, container, false);        viewpager viewpager = (viewpager) v.findviewbyid(r.id.viewpager);     setupviewpager(viewpager);      tablayout tablayout = (tablayout) v.findviewbyid(r.id.tablayout);     tablayout.setupwithviewpager(viewpager);        return v; }  private void setupviewpager(viewpager viewpager) {     pageradapter adapter = new pageradapter(getfragmentmanager());     adapter.addfragment(blogfragment.newinstance(), "one");     adapter.addfragment(trendingfragment.newinstance(), "two");     viewpager.setadapter(adapter); }  class pageradapter extends fragmentpageradapter {     private final list<fragment> mfragmentlist = new arraylist<>();     private final list<string> mfragmenttitlelist = new arraylist<>();      public pageradapter(fragmentmanager manager) {         super(manager);     }      @override     public fragment getitem(int position) {         return mfragmentlist.get(position);     }      @override     public int getcount() {         return mfragmentlist.size();     }      public void addfragment(fragment fragment, string title) {         mfragmentlist.add(fragment);         mfragmenttitlelist.add(title);     }      @override     public charsequence getpagetitle(int position) {         return mfragmenttitlelist.get(position);     } } 

return inflater.inflate(r.layout.fragment_home, container, false); 

in oncreateview means return newly inflated home fragment without of initialization code.

you should returning view created @ beginning of oncreateview:

return v; 

sample pageradapter provides tab titles:

public class pageradapter extends fragmentpageradapter {     private final list<fragment> mfragments = new arraylist<>();     private final list<string> mfragmenttitles = new arraylist<>();      public pageradapter(fragmentmanager fm) {         super(fm);     }      public void addfragment(fragment fragment, string title) {         mfragments.add(fragment);         mfragmenttitles.add(title);     }      @override     public fragment getitem(int position) {         return mfragments.get(position);     }      @override     public int getcount() {         return mfragments.size();     }      @override     public charsequence getpagetitle(int position) {         return mfragmenttitles.get(position);     } } 

and so, refactored oncreateview code like:

@override public view oncreateview(layoutinflater inflater, viewgroup container,                          bundle savedinstancestate) {      view v = inflater.inflate(r.layout.fragment_home, container, false);      final tablayout tablayout = (tablayout) v.findviewbyid(r.id.tablayout);     final viewpager viewpager = (viewpager) v.findviewbyid(r.id.viewpager);     pageradapter adapter = new pageradapter(getfragmentmanager());     adapter.addfragment(blogfragment.newinstance(), "one");     adapter.addfragment(trendingfragment.newinstance(), "two");      viewpager.setadapter(adapter);     tablayout.post(new runnable() {         @override         public void run() {             tablayout.setupwithviewpager(viewpager);         }     });       return v; } 

Comments

Popular posts from this blog

how to insert data php javascript mysql with multiple array session 2 -

multithreading - Exception in Application constructor -

windows - CertCreateCertificateContext returns CRYPT_E_ASN1_BADTAG / 8009310b -