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