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

Popular posts from this blog

javascript - RequestAnimationFrame not working when exiting fullscreen switching space on Safari -

jsf - How to ajax update an item in the footer of a PrimeFaces dataTable? -

jquery - Keeping Kendo Datepicker in min/max range -