Android listview infinite scrolling using Retrofit -
i need current project. requirement make listview paginated , load other data when scrolled down facebook , twitter apps do.
this i've tried far:
mainactivity
listview.setonscrolllistener(new infinitescrolllistener() { public boolean onloadmore(int page, int totalitemscount) { // triggered when new data needs appended list // add whatever code needed append new items adapterview customloadmoredatafromapi(page); // or customloadmoredatafromapi(totalitemscount); return true; // if more data being loaded; false otherwise. } }); private void getdata() { if(connectiondetector.hasnetworkconnection(getactivity())) { restadapter restadapter = new restadapter.builder() .setendpoint(home_domain) .setloglevel(restadapter.loglevel.full) .build(); webservices service = restadapter.create(webservices.class); service.getrecords( "1", // row "10", // count new callback<world>() { @override public void success(som som, response response) { datalist = parser.getresponsebody(response); adapter = new somadapter(getactivity(), datalist); listview.setadapter(adapter); } @override public void failure(retrofiterror retrofiterror) { log.e(tag, "" + retrofiterror.tostring()); } }); } else { toast.maketext(getactivity(), getactivity().getresources().getstring(r.string.connection_error), toast.length_short).show(); } } // append more data adapter public void customloadmoredatafromapi(int offset) { // method sends out network request , appends new data items adapter. // use offset value , add parameter api request retrieve paginated data. // deserialize api response , construct new objects append adapter getdata(); moreprogress.setvisibility(view.visible); log.e(tag, "more progress"); } infinitescrolllistener:
public abstract class infinitescrolllistener implements abslistview.onscrolllistener { private int bufferitemcount = 10; private int currentpage = 0; private int itemcount = 0; private boolean isloading = true; public infinitescrolllistener(int bufferitemcount) { this.bufferitemcount = bufferitemcount; } public abstract void loadmore(int page, int totalitemscount); @override public void onscrollstatechanged(abslistview view, int scrollstate) { // nothing } @override public void onscroll(abslistview view, int firstvisibleitem, int visibleitemcount, int totalitemcount) { if (totalitemcount < itemcount) { this.itemcount = totalitemcount; if (totalitemcount == 0) { this.isloading = true; } } if (isloading && (totalitemcount > itemcount)) { isloading = false; itemcount = totalitemcount; currentpage++; } if (!isloading && (totalitemcount - visibleitemcount)<=(firstvisibleitem + bufferitemcount)) { loadmore(currentpage + 1, totalitemcount); isloading = true; } } }
this displays the progressbar when scrolled down. works need append listview next fetched data. how going that? need advice first time pagination in android. thanks!
you did right. instead of creating new somadapter, need add newly fetched data it
@override public void success(som som, response response) { datalist = parser.getresponsebody(response); if (adapter == null) { adapter = new somadapter(getactivity(),datalist); listview.setadapter(adapter); } else { adapter.addall(datalist); } } if make custom adapter instead of extending arrayadapter, make sure addall method has notifydatasetchanged.
change getdata() take param offset , pagination request logic.
Comments
Post a Comment