mainactivity.java
public class mainactivity extends actionbaractivity { toolbar toolbar; viewpager pager; viewpageradapter adapter; slidingtablayout tabs; private arraylist<string> mlanguagesarray = null; int numboftabs; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); if (savedinstancestate == null) { bundle extras = getintent().getextras(); if (extras != null) { mlanguagesarray = new arraylist<string>(); mlanguagesarray.addall(extras.getstringarraylist("languages")); numboftabs = mlanguagesarray.size(); } } toolbar = (toolbar) findviewbyid(r.id.tool_bar); setsupportactionbar(toolbar); getsupportactionbar().seticon(r.drawable.ic_launcher); adapter = new viewpageradapter(getsupportfragmentmanager(), mlanguagesarray, numboftabs, mainactivity.this); pager = (viewpager) findviewbyid(r.id.pager); pager.setadapter(adapter); // assiging sliding tab layout view tabs = (slidingtablayout) findviewbyid(r.id.tabs); tabs.setviewpager(pager); tabs.setonpagechangelistener(new viewpager.onpagechangelistener() { @override public void onpagescrollstatechanged(int arg0) { } @override public void onpagescrolled(int arg0, float arg1, int arg2) { } @override public void onpageselected(int arg0) { refreshlistinfragment(arg0); } }); } protected void refreshlistinfragment(int position) { string currentlanguage = mlanguagesarray.get(position); fragmentmanager fm = getsupportfragmentmanager(); listviewfragment fragment = (listviewfragment) fm .findfragmentbyid(r.id.pager); fragment.loadlistview(currentlanguage); } } viewpageradapter.java
import java.util.arraylist; import android.content.context; import android.support.v4.app.fragment; import android.support.v4.app.fragmentmanager; import android.support.v4.app.fragmentstatepageradapter; public class viewpageradapter extends fragmentstatepageradapter { arraylist<string> titles; int numboftabs; context mcontext; public viewpageradapter(fragmentmanager fm, arraylist<string> mlanguagesarray, int mnumboftabsumb, context context) { super(fm); titles = new arraylist<string>(); this.titles = mlanguagesarray; this.numboftabs = mnumboftabsumb; this.mcontext = context; } @override public fragment getitem(int position) { listviewfragment listfragment = new listviewfragment(mcontext); return listfragment; } @override public charsequence getpagetitle(int position) { return titles.get(position); } @override public int getcount() { return numboftabs; } } listviewfragment.java
import android.support.v4.app.fragment; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.button; import android.widget.listview; import android.widget.progressbar; public class listviewfragment extends fragment { progressbar progressbar; listview list; arraylist<rstore> mrstorelist = null; radiolistadapter adapter; context mcontext; button tryagain; string mcurrentlanguage = null; @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view v = inflater.inflate(r.layout.listviewfragment, container, false); progressbar = (progressbar) v.findviewbyid(r.id.progressbar); list = (listview) v.findviewbyid(r.id.listview); if (listviewfragment.this.ismenuvisible()) { if (mrstorelist == null) { loadlistview("english"); } } return v; } public void loadlistview(final string currentlanguage) { this.mcurrentlanguage = currentlanguage; mrstorelist = new arraylist<rstore>(); new asynctask<void, void, string>() { private string jsonstr; @override protected void onpreexecute() { list.setvisibility(view.gone); progressbar.setvisibility(view.visible); tryagain.setvisibility(view.gone); super.onpreexecute(); } @override protected string doinbackground(void... arg0) { try { string url = serviceurls.music_php; customhttpclient sh = new customhttpclient(); jsonobject jsonobjpost = new jsonobject(); jsonobjpost.put("languages", currentlanguage); jsonstr = sh.makeservicecall(url, customhttpclient.post, jsonobjpost.tostring()); system.out.println("music_php_response " + jsonstr); } catch (exception e) { e.printstacktrace(); } return jsonstr; } @override protected void onpostexecute(string result) { if (result == null || result.trim().equalsignorecase("null") || result.trim().equalsignorecase("")) { progressbar.setvisibility(view.gone); super.onpostexecute(result); return; } try { string dummyjason = result.tostring(); jsonobject jsonobject = new jsonobject(dummyjason); jsonarray jsonarray = jsonobject.getjsonarray("language"); (int = 0; < jsonarray.length(); i++) { jsonobject obj = jsonarray.getjsonobject(i); string id = obj.getstring("id"); string language = obj.getstring("language"); string tittle = obj.getstring("tittle"); string link = obj.getstring("link"); rstore storecon = new rstore(); storecon.setid(id); storecon.setlanguage(language); storecon.settitle(tittle); storecon.setlink(link); mrstorelist.add(storecon); } } catch (jsonexception e) { e.printstacktrace(); } adapter = new radiolistadapter(mcontext, mrstorelist); list.setadapter(adapter); list.setvisibility(view.visible); progressbar.setvisibility(view.gone); super.onpostexecute(result); } }.executeonexecutor(asynctask.thread_pool_executor); } public listviewfragment(context context) { this.mcontext = context; } } i'm creating number of fragments dynamically using 1 fragment class called listviewfragment , setting view page adapter. listviewfragment contains listview populated dynamically service. code working fine problem is, datas inside fragments not refreshing or updating new values. in case listview showing loaded data in background service called , listview adapter updated updated listview not showing in fragment. please see code, , correct me if made mistake..thanks in advance
instead of calling method (currentlanguage) parameter in fragment activity using findfragmentbyid, i've passed (currentlanguage) bundle in viewpageradapter getitem() method , in listviewfragment class oncreateview got (currentlanguage) value using getarguments , passed (loadlistview) method. works fine , clean.
viewpageradapter.java
@override public fragment getitem(int position) { bundle args = new bundle(); args.putstring("language", titles.get(position)); listviewfragment f = new listviewfragment(mcontext); f.setarguments(args); return f; } listviewfragment.java
private void getarugs() { bundle args = getarguments(); mcurrentlanguage = args.getstring("language"); loadlistview(mcurrentlanguage); }
Comments
Post a Comment