android - ListView within ListActivity automatically scrolls up to first item each time new items are appended during infinite scroll -
as can see in activity , adapter class below, implemented infinite listview scroll calling api. obvious that, want show last items appending listview after each scroll, problem is, listview automatically starts scroll it's fist item each time new items added. how can solve that?
public class advertisementadapter extends arrayadapter<advertisement> { private context context; private list<advertisement> advertisementlist; public advertisementadapter(context context, int resource, list<advertisement> objects) { super(context, resource, objects); this.context = context; this.advertisementlist = objects; } @override public view getview(int position, view convertview, viewgroup parent) { layoutinflater inflater = (layoutinflater) context.getsystemservice(activity.layout_inflater_service); view view = inflater.inflate(r.layout.item_advertisement, parent, false); advertisement advertisement = advertisementlist.get(position); textview tv = (textview) view.findviewbyid(r.id.textview1); tv.settext(advertisement.gettitle()); return view; } } public class home extends listactivity implements onscrolllistener { textview output; list<mytask> tasks; string uri = "http://myhost.com/x/y/z"; int pageindex = 1; int pagesize = 10; list<advertisement> advertisementlist; advertisementadapter adapter; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.home); getlistview().setonscrolllistener(this); tasks = new arraylist<>(); requestdata(uri); } @override public void onscroll(abslistview view, int firstvisibleitem, int visibleitemcount, int totalitemcount) { // empty } @override public void onscrollstatechanged(abslistview listview, int scrollstate) { if (scrollstate == scroll_state_idle) { if (listview.getlastvisibleposition() >= listview.getcount() - 1) { pageindex++; getdata(); } } private void requestdata(string uri) { requestpackage p = new requestpackage(); p.setmethod("get"); p.seturi(uri); p.setparam("pageindex", integer.tostring(pageindex)); p.setparam("pagesize", integer.tostring(pagesize)); mytask task = new mytask(); task.execute(p); } protected void updatedisplay() { if (adapter != null) { adapter.notifydatasetchanged(); }else { adapter = new advertisementadapter(this,r.layout.item_advertisement, advertisementlist); } setlistadapter(adapter); } private class mytask extends asynctask<requestpackage, string, list<advertisement>> { @override protected void onpreexecute() { tasks.add(this); } @override protected list<advertisement> doinbackground(requestpackage... params) { string content = httpmanager.getdata(params[0]); if (advertisementlist == null) { advertisementlist = advertisementjsonparser.parsejson(content); } else { advertisementlist.addall(advertisementjsonparser.parsejson(content)); } return advertisementlist; } @override protected void onpostexecute(list<advertisement> result) { tasks.remove(this); advertisementlist = result; updatedisplay(); } } }
change in updatedisplay()
protected void updatedisplay() { if (adapter != null) { adapter.notifydatasetchanged(); } else { adapter = new advertisementadapter(this,r.layout.item_advertisement, advertisementlist); setlistadapter(adapter); } }
Comments
Post a Comment