Tuesday 15 March 2011

eclipse - Android Fragment Content Lost -



eclipse - Android Fragment Content Lost -

i have problem on android eclipse fragments in viewpager. when home activity starts show actionbar tabs , first fragment on screen. when swipe next fragment , first fragment, first fragment contents still on screen. on other hand if swipe 2 times right , go first fragment, contents lost , blank screen shown. codes below. how retain each fragment content either shown or visible ? help appreciated. thanx in advance.

homeactivity.java

public class homeactivity extends fragmentactivity implements tablistener { private string[] menuitems = null; private actionbar bar = null; private viewpager viewpager = null; private tabsadapter tabsadapter = null; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_home); viewpager = (viewpager) findviewbyid(r.id.viewpager); viewpager.setpagemargin(10); menuitems = getresources().getstringarray(r.array.menutitles); bar = getactionbar(); bar.setnavigationmode(actionbar.navigation_mode_tabs); tabsadapter = new tabsadapter(this, viewpager); (int = 0; < menuitems.length; i++) { switch (i) { case 0: tabsadapter.addtab(bar.newtab().settext(menuitems[i]), newsfeedactivity.class, null); break; case 1: tabsadapter.addtab(bar.newtab().settext(menuitems[i]), notificationactivity.class, null); break; case 2: tabsadapter.addtab(bar.newtab().settext(menuitems[i]), newsfeedactivity.class, null); break; case 3: tabsadapter.addtab(bar.newtab().settext(menuitems[i]), notificationactivity.class, null); break; case 4: tabsadapter.addtab(bar.newtab().settext(menuitems[i]), newsfeedactivity.class, null); break; default: break; } } if (savedinstancestate != null) { bar.setselectednavigationitem(savedinstancestate.getint("tab", 0)); } } @override protected void onsaveinstancestate(bundle outstate) { super.onsaveinstancestate(outstate); outstate.putint("tab", getactionbar().getselectednavigationindex()); } @override protected void onrestoreinstancestate(bundle savedinstancestate) { super.onrestoreinstancestate(savedinstancestate); // restore selected tab int saved = savedinstancestate.getint("tab", 0); if (saved != getactionbar().getselectednavigationindex()) getactionbar().setselectednavigationitem(saved); } @override public void ontabselected(tab tab, fragmenttransaction ft) { } @override public void ontabunselected(tab tab, fragmenttransaction ft) { } @override public void ontabreselected(tab tab, fragmenttransaction ft) { } public static class tabsadapter extends fragmentpageradapter implements actionbar.tablistener, viewpager.onpagechangelistener { private final context mcontext; private final actionbar mactionbar; private final viewpager mviewpager; private final arraylist<tabinfo> mtabs = new arraylist<tabinfo>(); static final class tabinfo { private final class<?> clss; private final bundle args; tabinfo(class<?> _class, bundle _args) { clss = _class; args = _args; } } public tabsadapter(fragmentactivity activity, viewpager pager) { super(activity.getsupportfragmentmanager()); mcontext = activity; mactionbar = activity.getactionbar(); mviewpager = pager; mviewpager.setadapter(this); mviewpager.setonpagechangelistener(this); } public void addtab(actionbar.tab tab, class<?> clss, bundle args) { tabinfo info = new tabinfo(clss, args); tab.settag(info); tab.settablistener(this); mtabs.add(info); mactionbar.addtab(tab); notifydatasetchanged(); } @override public void onpagescrollstatechanged(int state) { } @override public void onpagescrolled(int position, float positionoffset, int positionoffsetpixels) { } @override public void onpageselected(int position) { mactionbar.setselectednavigationitem(position); } @override public void ontabreselected(tab tab, fragmenttransaction ft) { toast.maketext(mcontext, "reselected!", toast.length_short).show(); object tag = tab.gettag(); (int = 0; < mtabs.size(); i++) { if (mtabs.get(i) == tag) { mviewpager.setcurrentitem(i); } } } @override public void ontabselected(tab tab, fragmenttransaction ft) { toast.maketext(mcontext, "gokay!", toast.length_short).show(); object tag = tab.gettag(); (int = 0; < mtabs.size(); i++) { if (mtabs.get(i) == tag) { mviewpager.setcurrentitem(i); } } } @override public void ontabunselected(tab tab, fragmenttransaction ft) { } @override public fragment getitem(int position) { tabinfo info = mtabs.get(position); homecoming fragment.instantiate(mcontext, info.clss.getname(), info.args); } @override public int getcount() { homecoming mtabs.size(); } }

}

newsfeedactivity.java

public class newsfeedactivity extends fragment { static final string url = "http://api.androidhive.info/pizza/?format=xml"; // xml node keys static final string key_item = "item"; // parent node static final string key_id = "id"; static final string key_name = "name"; static final string key_cost = "cost"; static final string key_desc = "description"; private arraylist<string> xmllist = null; private xmlparser parser = null; private string xml = ""; private document doc = null; private nodelist nl = null; private view view = null; private element e = null; private listview listnewsfeed = null; private static bundle args = null; private static newsfeedactivity newsfeed = null; private arrayadapter<string> adapter = null; public static newsfeedactivity newinstance(int page, string title) { newsfeed = new newsfeedactivity(); args = new bundle(); args.putint("page", page); args.putstring("newsfeed", title); newsfeed.setarguments(args); homecoming newsfeed; } @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view = inflater.inflate(r.layout.activity_news_feed, container, false); if (getactivity().getactionbar().getselectedtab().getposition() == 0) { new newsfeeder().execute(""); } homecoming view; } private class newsfeeder extends asynctask<string, string, string> { private progressdialog mprogressdialog = null; @override protected void onpreexecute() { super.onpreexecute(); mprogressdialog = new progressdialog(getactivity()); mprogressdialog.setmessage("haber kaynağı yenileniyor.."); mprogressdialog.setcancelable(false); mprogressdialog.setprogressstyle(progressdialog.style_spinner); mprogressdialog.show(); } @override protected string doinbackground(string... params) { xmllist = new arraylist<string>(); seek { parser = new xmlparser(); xml = parser.getxmlfromurl(url); // getting xml log.i("gokay", xml); doc = parser.getdomelement(xml); // getting dom element nl = doc.getelementsbytagname(key_item); homecoming null; } grab (exception e) { e.printstacktrace(); system.out.println(e.getmessage()); log.e("gokay", e.getmessage()); homecoming null; } } @override protected void onpostexecute(string result) { super.onpostexecute(result); mprogressdialog.dismiss(); (int = 0; < nl.getlength(); i++) { e = (element) nl.item(i); xmllist.add(parser.getvalue(e, key_id)); xmllist.add(parser.getvalue(e, key_name)); xmllist.add("rs." + parser.getvalue(e, key_cost)); xmllist.add(parser.getvalue(e, key_desc)); } listnewsfeed = (listview) view.findviewbyid(r.id.listview1); adapter = new arrayadapter<string>(getactivity(), android.r.layout.simple_list_item_1, xmllist); listnewsfeed.setadapter(adapter); // onfoodmenuitemsdbaddfinished(); } }

}

try using

setretaininstance(true);

in oncreate() fragment

android eclipse android-fragments android-viewpager

No comments:

Post a Comment