android - Menu Button on ViewPager toasts wrong position -
i loading local htmls in webview using viewpager. works fine , right page loaded webviewfragment viewpager activity. scroll or swipe works fine, added menu button title of current webview, , toast it. menu button returns webview title of next 2 webview pages in viewpager.
reducing setofscreenlimit 1 toasts webview title of next webview page in viewpager. cant setofscreenlimit 0. probable way current item's webview title when menu button clicked. need , save db.
code:
viewpager
viewpager pager = (viewpager) findviewbyid(r.id.pager); tabspageradapterenglish pageadapter = new tabspageradapterenglish(getsupportfragmentmanager()); bundle extras = getintent().getextras(); int value = 0; if (extras != null) { value = extras.getint("keyhtml"); } pager.setadapter(pageadapter); pager.setcurrentitem(value); pager.setoffscreenpagelimit(1);
adapter
public class tabspageradapterenglish extends fragmentpageradapter { private static int num_items = 3 public tabspageradapterenglish(fragmentmanager fragmentmanager) { super(fragmentmanager); } // returns total number of pages @override public int getcount() { return num_items; } // returns fragment display page @override public fragment getitem(int position) { switch (position) { case 0: return webfragmentenglish.newinstance(0, "file:///android_asset/page1.html"); case 1: return webfragmentenglish.newinstance(1, "file:///android_asset/page2.html"); case 2: return webfragmentenglish.newinstance(2, "file:///android_asset/page3.html"); default: return null; } } @override public charsequence getpagetitle(int position) { } }
webfragment
public class webfragmentenglish extends fragment { // newinstance constructor creating fragment arguments public static webfragmentenglish newinstance(int position, string url) { webfragmentenglish fragmentfirst = new webfragmentenglish(); bundle args = new bundle(); args.putint("page_position", position); args.putstring("keyhtml", url); fragmentfirst.setarguments(args); return fragmentfirst; } // store instance variables based on arguments passed @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); sethasoptionsmenu(true); toolbar toolbar = (toolbar) getactivity().findviewbyid(r.id.toolbar); if (null != toolbar) { toolbar.setnavigationicon(r.drawable.abc_ic_ab_back_mtrl_am_alpha); } position = getarguments().getint("page_position", 0); url = getarguments().getstring("keyhtml"); toolbar.setonmenuitemclicklistener(new toolbar.onmenuitemclicklistener() { @override public boolean onmenuitemclick(menuitem item) { switch (item.getitemid()) { case android.r.id.home: getactivity().finish(); case r.id.action_addtofav: webview = (webview) getactivity().findviewbyid(r.id.webview1); htitle = webview.gettitle(); savedata(); toast.maketext(getactivity(), htitle + " added favorite", toast.length_short).show(); return true; } return false; } }); } // inflate view fragment based on layout xml @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view view = inflater.inflate(r.layout.webview, container, false); webview = (webview) view.findviewbyid(r.id.webview1); progressbar = (progressbar) view.findviewbyid(r.id.progressbar); progressbar.setmax(100); webview.setwebviewclient(new webviewclientdemo()); webview.setwebchromeclient(new webchromeclientdemo()); webview.setinitialscale(1); webview.getsettings().setjavascriptenabled(true); webview.getsettings().setloadwithoverviewmode(true); webview.getsettings().setusewideviewport(true); webview.setscrollbarstyle(webview.scrollbars_outside_overlay); webview.getsettings().setpluginstate(websettings.pluginstate.on); webview.getsettings().setloadsimagesautomatically(true); webview.setscrollbarstyle(webview.scrollbars_outside_overlay); webview.setscrollbarfadingenabled(false); webview.getsettings().setbuiltinzoomcontrols(true); webview.setscrollbarstyle(view.scrollbars_inside_overlay); webview.setonlongclicklistener(new view.onlongclicklistener() { @override public boolean onlongclick(view arg0) { // todo auto-generated method stub return true; } }); webview.setlongclickable(false); webview.setwebchromeclient(new webchromeclient() { public void onprogresschanged(webview view, int progress) { progressbar.setprogress(progress); } }); webview.loadurl(url); return view; }
viewpager load current page , next page(s) offscreenlimit. name of current page need current position of adapter.
it's hard give more specific without having code posted. can use viewpager getcurrentitem method visible index. there can either compare index of page you're displaying (this works if view pager static , pages known in advance), or can use index fragment pageradapter , call method on save name.
Comments
Post a Comment