java - Recyclerviews in ViewPager -


i'm trying working: want 2 recyclerviews in 1 viewpager. followed tutorial: http://android-java-development.blogspot.de/2012/05/system.html, doesn't seem work. looks view pager empty , recycler view doesn't show up.

here's layout code:

<android.support.v4.widget.swiperefreshlayout         android:id="@+id/pager_refresh_layout"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:paddingtop="@dimen/tab_height">          <android.support.v4.view.viewpager             android:id="@+id/pager"             android:layout_width="match_parent"             android:layout_height="match_parent"             android:background="@color/accent"/>     </android.support.v4.widget.swiperefreshlayout> 

and pageadapter:

public class newspageradapter extends pageradapter {     private context context;     private vector<recyclerview> recyclerviewlist;     private string[] titles;      public newspageradapter(context context, int titlesid) {         this.context = context;         this.recyclerviewlist = new vector<>();          settitles(titlesid);     }      public void add(recyclerview recyclerview) {         recyclerviewlist.add(recyclerview);     }      public recyclerview.adapter getadapterforviewatindex(int index) {         return recyclerviewlist.get(index).getadapter();     }      @override     public object instantiateitem(viewgroup container, int position) {         container.addview(recyclerviewlist.get(position),                 new recyclerview.layoutparams(viewgroup.layoutparams.match_parent, 100)         );         return container;     }      @override     public int getcount() {         return recyclerviewlist.size();     }      @override     public boolean isviewfromobject(view view, object object) {         return view.equals(object);     }      @override     public void destroyitem(viewgroup container, int position, object object) {         container.removeview((view) object);     }      @override     public charsequence getpagetitle(int position) {         return titles[position];     }      public void settitles(int titles) {         this.titles = context.getresources().getstringarray(titles);     } } 

and oncreatview method:

gridlayoutmanager layoutmanager1 = new gridlayoutmanager(getactivity(), getresources().getinteger(r.integer.news_column_count));  gridlayoutmanager layoutmanager2 = new gridlayoutmanager(getactivity(), getresources().getinteger(r.integer.news_column_count));  recyclerview listview1 = new recyclerview(getactivity()); recyclerview listview2 = new recyclerview(getactivity()); listview1.setlayoutmanager(layoutmanager1); listview2.setlayoutmanager(layoutmanager2);  newsadapter adapter1 = new newsadapter(getactivity(), null); newsadapter adapter2 = new newsadapter(getactivity(), null); adapter1.setonitemclicklistener(this); adapter2.setonitemclicklistener(this);  listview1.setadapter(adapter1); listview2.setadapter(adapter2);  newspageradapter.add(listview1); newspageradapter.add(listview2);  newsviewpager.setadapter(newspageradapter); 

here i'm passing cursor object adapter:

@override     public void onloadfinished(loader<cursor> loader, cursor data) {         ((newsadapter) newspageradapter.getadapterforviewatindex(0)).swapcursor(data);     } 

you have extend fragmentpageradapter or fragmentstatepageradapter in order embed recyclerview. if going update viewpager contents during lifecycle strictly recommended use fragmentstatepageradapter

you have create additional fragment layout, containing recyclerview.

if wish update viewpager swiperefreshlayout, don't wrap swiperefreshlayout. instead, must have swiperefreshlayout inside fragment layout.

therefore fragment may following xml:

<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.swiperefreshlayout xmlns:android="http://schemas.android.com/apk/res/android"     android:id="@+id/listrefresh"     android:layout_width="match_parent"     android:layout_height="match_parent">     <android.support.v7.widget.recyclerview         android:id="@+id/categorylist"         android:scrollbars="vertical"         android:layout_width="match_parent"         android:layout_height="match_parent"/> </android.support.v4.widget.swiperefreshlayout> 

and create additional fragment class, inflate layout , implement methods, need update refresh indicator status.

a bit old example found here: http://developer.android.com/training/implementing-navigation/lateral.html

if wish connect viewpager new support library tablayout, 1 with:

tablayout.setupwithviewpager(viewpager); 

finally, if update "fragmented" viewpager, don't try reset adapter, fragments managed not adapter, fragmentmanager. wiser update content of corresponding recyclerviews

public class myfragmentedpageradapter extends fragmentstatepageradapter {     private final tablayout mtablayout;     private final swiperefreshlayout.onrefreshlistener mrefreshlistener;     private vector<pricelistfragment> fragmentlist;     private vector<string> titles;      public myfragmentedpageradapter(fragmentmanager fm, mycomplexdata data, oncartactionlistener listener, tablayout tablayout, swiperefreshlayout.onrefreshlistener refreshlistener) {         super(fm);         mtablayout = tablayout;          // external refresh listener, trigger updatedata()          mrefreshlistener = refreshlistener;          fragmentlist = new vector<>();         titles = new vector<>();         updatedata(data);     }      public void updatedata(mycomplexdata data) {         boolean updatetabs = false;         boolean hasnewdata = false;          vector<string> newtitles = new vector<>();          int position = 0;         for(tabcontents tabcontents : data.gettabcontents()) {              if(tabcontents.getlistcontents() == null)                 continue;             hasnewdata = true;             boolean isnewfragment;              myfragment fragment;             try {                 fragment = fragmentlist.get(position);                 isnewfragment = false;             } catch (arrayindexoutofboundsexception e) {                 fragment = new myfragment();                 isnewfragment = true;             }             // update data, title , hide update indicator of swiperefreshlayout             fragment.settabcontents(tabcontents);              newtitles.add(tabcontents.getname());              if(isnewfragment) {                 fragment.setrefreshlistener(mrefreshlistener);                 fragmentlist.add(fragment);             }             position++;         }          if(!hasnewdata)             return;          // need decide, whether update tabs         if(titles.size() != newtitles.size()) {             updatetabs = true;         } else {             for(position = 0; position < titles.size(); position++) {                 if(!titles.get(position).equals(newtitles.get(position))) {                     updatetabs = true;                     break;                 }             }         }          titles = newtitles;         notifydatasetchanged();          if(updatetabs)             mtablayout.settabsfrompageradapter(this);     }      @override     public fragment getitem(int position) {         return fragmentlist.get(position);     }      // need override method     @override     public int getitemposition(object object) {         myfragment fragment = (myfragment) object;         string title = (string) fragment.gettitle();         int position = titles.indexof(title);          if (position >= 0) {             return position;         } else {             return position_none;         }     }      @override     public int getcount() {         return titles.size();     }      @override     public charsequence getpagetitle(int position) {         return fragmentlist.get(position).gettitle();     } } 

your myfragment class has implement gettitle() method.


Comments

Popular posts from this blog

android - MPAndroidChart - How to add Annotations or images to the chart -

javascript - Add class to another page attribute using URL id - Jquery -

firefox - Where is 'webgl.osmesalib' parameter? -