android - OnDetach/onAttach fragment recreate fragment activity -
android - OnDetach/onAttach fragment recreate fragment activity -
i want detach/attach fragments, how set, fragment not recreate, after attach.
in fragment have webview; when select , unselect tabs, webview load startpage.
there code:
public class mainactivity extends activity implements onclicklistener, onmenuitemclicklistener { actionbar bar; view v; public static textview tilt; layoutinflater inflater; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); setrequestedorientation(activityinfo.screen_orientation_landscape); onaddtab(); view v=getlayoutinflater().inflate(r.layout.action_bar, null); imagebutton im = (imagebutton)v.findviewbyid(r.id.tab_toggle); im.setonclicklistener(this); getactionbar().setbackgrounddrawable(getresources().getdrawable(r.drawable.shape_layout)); getactionbar().setdisplayoptions(actionbar.display_show_custom); getactionbar().setcustomview(v); ontoggletabs(); } @override public void onclick(view v) { // todo auto-generated method stub switch (v.getid()){ case r.id.tab_toggle: onaddtab(); break; } } public void onaddtab() { final actionbar bar = getactionbar(); view v=getlayoutinflater().inflate(r.layout.layout_tab, null); tilt = (textview)v.findviewbyid(r.id.tit_le); actionbar.layoutparams lp = new actionbar.layoutparams(actionbar.layoutparams.wrap_content, actionbar.layoutparams.wrap_content); lp.gravity = gravity.center; v.setlayoutparams(lp); closetab = (imagebutton)v.findviewbyid(r.id.close); closetab.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { // todo auto-generated method stub onremovetab(); } }); bar.addtab(bar.newtab() .setcustomview(v) .settablistener(new tablistener<web>(this, "tag a", web.class))); } public void onremovetab() { final actionbar bar = getactionbar(); tab tab = bar.getselectedtab(); bar.removetab(tab); } public void ontoggletabs() { final actionbar bar = getactionbar(); bar.setnavigationmode(actionbar.navigation_mode_tabs); } public void onremovealltabs(view v) { getactionbar().removealltabs(); } public static class tablistener<t extends fragment> implements actionbar.tablistener{ private final activity myactivity; private final string mytag; private final class<t> myclass; public tablistener(activity activity, string tag, class<t> cls) { myactivity = activity; mytag = tag; myclass = cls; } @override public void ontabselected(tab tab, fragmenttransaction ft) { fragment myfragment = myactivity.getfragmentmanager().findfragmentbytag(mytag); // check if fragment initialized if (myfragment == null) { // if not, instantiate , add together activity myfragment = fragment.instantiate(myactivity, myclass.getname()); ft.add(r.id.fragment0, myfragment, mytag); } else { // if exists, attach in order show ft.attach(myfragment); } } @override public void ontabunselected(tab tab, fragmenttransaction ft) { fragment myfragment = myactivity.getfragmentmanager().findfragmentbytag(mytag); if (myfragment != null) { // detach fragment, because 1 beingness attached ft.detach(myfragment); } } @override public void ontabreselected(tab tab, fragmenttransaction ft) { // todo auto-generated method stub } }
there fragment:
public class web extends fragment implements onlongclicklistener, onclicklistener{ @override public void oncreate(bundle savedinstancestate) { // todo auto-generated method stub super.oncreate(savedinstancestate); } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { // todo auto-generated method stub c=this.getactivity(); v = inflater.inflate(r.layout.activity_main, container, false); homecoming v; } @suppresswarnings("deprecation") @override public void onactivitycreated(bundle savedinstancestate) { // todo auto-generated method stub super.onactivitycreated(savedinstancestate); setretaininstance(true); wv = (webview)v.findviewbyid(r.id.wv); wv.setwebchromeclient(new webchromeclient(){ @override public void onprogresschanged(webview view, int progress) { // todo auto-generated method stub super.onprogresschanged(view, progress); if(progress < 100 && pr.getvisibility() == progressbar.gone){ pr.setvisibility(progressbar.visible); } pr.setprogress(progress); if(progress == 100) { pr.setvisibility(progressbar.gone); } } }); wv.setwebviewclient(new mywebviewclient()); wv.loadurl("http://www.google.com"); wv.setonlongclicklistener(this);}
try setretaininstance(boolean)
also check posts: android fragments setretaininstance(true) not works (android back upwards library) fragment setretaininstance not works (android back upwards lib) understanding fragment's setretaininstance(boolean)
android fragment detach
Comments
Post a Comment