android - Strange behavior of ViewPager -


i using android app pagerslidingtabstrip , material navigation drawer libraries. watching strange behavior of viewpager - when opening first time, works normally, opening again, viewpager empty, without adapter.

mainactivity:

public class mainactivity extends appcompatactivity {      private drawer drawer;     private int lastselection;     private broadcastreceiver mregistrationbroadcastreceiver;      private boolean isclickedbyuser = false;      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);          toolbar toolbar = (toolbar) findviewbyid(r.id.toolbar);         setsupportactionbar(toolbar);          drawer = new drawerbuilder().withactivity(mainactivity.this)                 .withtoolbar(toolbar).adddraweritems(                         new primarydraweritem().withname(r.string.name1)                                 .withicon(r.drawable.icon1),                         new primarydraweritem()                                 .withname(r.string.name2)                                 .withicon(r.drawable.icon2))                 .withondraweritemclicklistener(                         new drawer.ondraweritemclicklistener() {                             @override                             public boolean onitemclick(adapterview<?> adapterview, view view,                                                        int position, long id,                                                        idraweritem idraweritem) {                                 switch (position) {                                     case 0:                                         settitle(r.string.title1);                                         break;                                     case 1:                                         settitle(r.string.title2);                                         break;                                 }                                  fragmentmanager fmanager = getsupportfragmentmanager();                                 fragmenttransaction transaction = fmanager.begintransaction();                                 transaction.replace(r.id.container, placeholderfragment.newinstance(                                         position)).commitallowingstateloss();                                  lastselection = position;                                 return false;                             }                         })                 .build();           drawer.setselection(0);     }      @override     public void onbackpressed() {         if (drawer != null && drawer.isdraweropen()) {             drawer.closedrawer();         } else {             super.onbackpressed();         }     }      @override     public void onconfigurationchanged(configuration newconfig){         super.onconfigurationchanged(newconfig);         drawer.setselection(lastselection);     }  } 

placeholderfragment, in viewpager done:

public class placeholderfragment extends fragment {      private static final string id = "id";      private int id;      public static placeholderfragment newinstance(int id) {         placeholderfragment fragment = new placeholderfragment();         bundle args = new bundle();         args.putint(id, id);         fragment.setarguments(args);         return fragment;     }      public placeholderfragment() {         // required empty public constructor     }      @override     public void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         if (getarguments() != null) {             id = getarguments().getint(id);         }     }      @override     public view oncreateview(layoutinflater inflater, viewgroup container,                              bundle savedinstancestate) {         view rootview = null;          switch (id) {             case 0:                 rootview = inflater.inflate(r.layout.view1, container, false);                 break;             case 1:                 rootview = inflater.inflate(r.layout.tabs, container, false);                  viewpager pager = (viewpager) rootview.findviewbyid(r.id.viewpager);                 pager.setadapter(new pageradapter(getactivity().getsupportfragmentmanager()));                  pagerslidingtabstrip tabs = (pagerslidingtabstrip) rootview.findviewbyid(r.id.tabs);                 tabs.setviewpager(pager);                 tabs.setshouldexpand(true);                 tabs.setindicatorcolorresource(r.color.tab_indicator_color);                 tabs.settextcolorresource(r.color.tab_text_color);                 break;             default:                 break;         }          return rootview;     }      private class pageradapter extends fragmentpageradapter {          private int[] titlesresids = { r.string.title1, r.string.title2 };          public pageradapter(fragmentmanager fm) {             super(fm);         }          @override         public charsequence getpagetitle(int position) {             return getstring(titlesresids[position]);         }          @override         public int getcount() {             return titlesresids.length;         }          @override         public fragment getitem(int position) {             return tabfragment.newinstance(position);         }     }  } 

tabfragment:

public class tabfragment extends listfragment {      private static final string id = "id";     private int id;      public static tabfragment newinstance(int id) {         tabfragment fragment = new tabfragment();         bundle args = new bundle();         args.putint(id, id);         fragment.setarguments(args);         return fragment;     }      public tabfragment() {     }      @override     public void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         if (getarguments() != null) {             id = getarguments().getint(id);         }     }      @override     public view oncreateview(layoutinflater inflater, viewgroup container,                              bundle savedinstancestate) {         asynctask<string, string, string> asynctask = new asynctask<string, string, string>() {             @override             protected string doinbackground(string... params) {                 okhttpclient client = new okhttpclient();                  request request = new request.builder()                         .url("http://host/")                         .build();                  string result = null;                 try {                     response response = client.newcall(request).execute();                     result = response.body().string();                 } catch (ioexception e) {                     e.printstacktrace();                 }                 return result;             }              @override             protected void onpostexecute(string response) {                 super.onpostexecute(response);                 gson gson = new gson();                 jsonreader reader = new jsonreader(new stringreader(response));                 reader.setlenient(true);                  arraylist<message> messages = gson.fromjson(reader,                         new typetoken<arraylist<message>>(){}.gettype());                  int = messages.size() - 1;                  while (i != -1) {                     if (messages.get(i).gettype() != id)                         messages.remove(i);                      i--;                 }                  arrayadapter adapter = new mylistadapter(messages);                 setlistadapter(adapter);             }         };          asynctask.execute();          return inflater.inflate(r.layout.fragment, container, false);     }      @override     public void onlistitemclick(listview l, view v, int position, long id) {         super.onlistitemclick(l, v, position, id);          intent messageintent = new intent(getactivity(), messageactivity.class);         startactivity(messageintent);     }      private class mylistadapter extends arrayadapter {          private context context = getactivity();         private arraylist<message> messages;          public mylistadapter(arraylist<message> messages) {             super(getactivity(), r.layout.list_adapter);             this.messages = messages;         }          @override         public int getcount() {             return messages.size();         }          @override         public view getview(int position, view convertview, viewgroup parent) {             viewholder holder;              if (convertview == null) {                 layoutinflater inflater = layoutinflater.from(context);                 convertview = inflater.inflate(r.layout.list_adapter, parent, false);                  holder = new viewholder();                 holder.imageicon = (imageview) convertview.findviewbyid(r.id.list_icon);                 holder.textdatetime = (textview) convertview.findviewbyid(r.id.list_text_datetime);                 holder.textprimary = (textview) convertview.findviewbyid(r.id.list_text_primary);                 holder.textsecondary = (textview) convertview.findviewbyid(r.id.list_text_secondary);                  convertview.settag(holder);             } else {                 holder = (viewholder) convertview.gettag();             }              message message = messages.get(position);              long timestamp = message.gettimestamp() * 1000;             date date = new date(timestamp);             string datetime = new simpledateformat("dd.mm.yyyy hh:mm", locale.us).format(date);              holder.imageicon.setimageresource(message.geticon() == 0 ?                     r.drawable.icon1 :                     r.drawable.icon2);             holder.textdatetime.settext(datetime);             holder.textprimary.settext(message.gettitle());             holder.textsecondary.settext(message.getmessage());              return convertview;         }          private class viewholder {             imageview imageicon;             textview textdatetime;             textview textprimary;             textview textsecondary;         }     } } 

i decided problem. i'm insert method getchildfragmentmanager() in placeholderfragment in answer - how set viewpager inside fragment.


Comments