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.
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
Post a Comment