android - Set last position when scroll load more recycleview -


i trying implement load more recycleview it's working fine when scroll recycleview @ time first item top of view, want next scrollable item @ top, how can solve problem, please me

mainactivity.java

public class mainactivity extends appcompatactivity {     private int page_no = 0;     private recyclerview mrecyclerview;     private arraylist<notificationbean> musers = new arraylist<>();     private useradapter museradapter;     private notificationbean mnotificationbean;     private int loadmorearraylistsize;     public int arraylistsize;     // private linearlayoutmanager mlayoutmanager;      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);         musers = new arraylist<>();          mrecyclerview = (recyclerview) findviewbyid(r.id.recycleview); //        mlayoutmanager = new linearlayoutmanager(this); //        mrecyclerview.setlayoutmanager(mlayoutmanager);         getdata(mainactivity.this, page_no, "4");         mrecyclerview.setlayoutmanager(new linearlayoutmanager(this));         museradapter = new useradapter();         museradapter.setonloadmorelistener(new onloadmorelistener() {             @override             public void onloadmore() {                 log.e("haint", "load more");                 musers.add(null);                 museradapter.notifyiteminserted(musers.size() - 1);                  //load more data reyclerview                 new handler().postdelayed(new runnable() {                     @override                     public void run() {                         log.e("haint", "load more 2");                          //remove loading item                         musers.remove(musers.size() - 1);                         museradapter.notifyitemremoved(musers.size());                          //load data                         page_no++;                         //callapi(1);                         //  log.d("arrtemp position: : ", string.valueof(arrtemp));                         getdata(mainactivity.this, page_no, "4");                         // mlayoutmanager.scrolltopositionwithoffset(musers.size() - 10, 0);                         log.v("loadmorelistener arsize", integer.tostring(musers.size()));                         loadmorearraylistsize = arraylistsize - musers.size();                         log.v("loadmorearraylistsize", integer.tostring(loadmorearraylistsize));                      }                 }, 5000);             }         });     }      static class userviewholder extends recyclerview.viewholder {         public imageview imgview;         public textview txtcomment, txtparamlink, txttitle, txtvideoid;          public userviewholder(view itemview) {             super(itemview);             txtcomment = (textview) itemview.findviewbyid(r.id.txtcomment);             txtparamlink = (textview) itemview.findviewbyid(r.id.txtparamlink);             txttitle = (textview) itemview.findviewbyid(r.id.txttitle);             txtvideoid = (textview) itemview.findviewbyid(r.id.txtvideoid);             imgview = (imageview) itemview.findviewbyid(r.id.imgview);         }     }      static class loadingviewholder extends recyclerview.viewholder {         public progressbar progressbar;          public loadingviewholder(view itemview) {             super(itemview);             progressbar = (progressbar) itemview.findviewbyid(r.id.progressbar1);         }     }      class useradapter extends recyclerview.adapter<recyclerview.viewholder> {          private final int view_type_item = 0;         private final int view_type_loading = 1;          private onloadmorelistener monloadmorelistener;          private boolean isloading;         private int visiblethreshold = 5;         private int lastvisibleitem, totalitemcount;          public useradapter() {             final linearlayoutmanager linearlayoutmanager = (linearlayoutmanager) mrecyclerview.getlayoutmanager();             mrecyclerview.addonscrolllistener(new recyclerview.onscrolllistener() {                 @override                 public void onscrolled(recyclerview recyclerview, int dx, int dy) {                     super.onscrolled(recyclerview, dx, dy);                      totalitemcount = linearlayoutmanager.getitemcount();                     lastvisibleitem = linearlayoutmanager.findlastvisibleitemposition();                      if (!isloading && totalitemcount <= (lastvisibleitem + visiblethreshold)) {                         if (monloadmorelistener != null) {                             monloadmorelistener.onloadmore();                         }                         isloading = true;                     }                 }             });         }          public void setonloadmorelistener(onloadmorelistener monloadmorelistener) {             this.monloadmorelistener = monloadmorelistener;         }          @override         public int getitemviewtype(int position) {             return musers.get(position) == null ? view_type_loading : view_type_item;         }          @override         public recyclerview.viewholder oncreateviewholder(viewgroup parent, int viewtype) {             if (viewtype == view_type_item) {                 view view = layoutinflater.from(mainactivity.this).inflate(r.layout.notification_item, parent, false);                 return new userviewholder(view);             } else if (viewtype == view_type_loading) {                 view view = layoutinflater.from(mainactivity.this).inflate(r.layout.layout_loading_item, parent, false);                 return new loadingviewholder(view);             }             return null;         }          @override         public void onbindviewholder(recyclerview.viewholder holder, int position) {             if (holder instanceof userviewholder) {                 notificationbean user = musers.get(position);                 userviewholder userviewholder = (userviewholder) holder; //                userviewholder.tvname.settext(user.getname()); //                userviewholder.tvemailid.settext(user.getemail());                 userviewholder.txtcomment.settext(integer.tostring(user.getcomment()));                 userviewholder.txtparamlink.settext(user.getpermalink());                 userviewholder.txttitle.settext(user.gettitle());                 userviewholder.txtvideoid.settext(user.getvideoid());                 if (user.getimage() != null) {                     glide.with(mainactivity.this).load(user.getimage()).placeholder(r.mipmap.ic_launcher).error(r.mipmap.ic_launcher).dontanimate().into(userviewholder.imgview);                 }             } else if (holder instanceof loadingviewholder) {                 loadingviewholder loadingviewholder = (loadingviewholder) holder;                 loadingviewholder.progressbar.setindeterminate(true);             }         }          @override         public int getitemcount() {             return musers == null ? 0 : musers.size();         }          public void setloaded() {             isloading = false;         }     }      private void getdata(context context, final int posts_per_page, final string type) {  //        final progressdialog pdialog = new progressdialog(this); //        pdialog.setmessage("loading..."); //        pdialog.show();         requestqueue queue = volley.newrequestqueue(context); //        stringrequest sr = new stringrequest(request.method.post, "http://asiatube.info/sgtube/api/ws.php", new response.listener<string>() {         stringrequest sr = new stringrequest(request.method.post, "http://steanrewards.com/api/ws.php", new response.listener<string>() {             @override             public void onresponse(string response) {                 jsonarray jarray;                 jsonarray jsonarray = null;                 jsonobject jsonobject = null;                 try {                     jarray = new jsonarray(response);                     jsonobject jobj = jarray.getjsonobject(0);                     int code = jobj.getint("code");                     if (code == 0) {                         log.d("allcount:: :: ::", string.valueof(jobj.optint("allcount")));                         if (jobj.has("result")) {                             jsonarray = jobj.getjsonarray("result");                             log.d("eventlist array=", jsonarray.length() + "");                              if (jsonarray != null && jsonarray.length() > 0) {  //                                arrtemp = new arraylist<>();                                 (int = 0; < jsonarray.length(); i++) {                                      jsonobject = jsonarray.getjsonobject(i);                                     mnotificationbean = new notificationbean();                                     mnotificationbean.id = jsonobject.getstring("id");                                     mnotificationbean.permalink = jsonobject.getstring("permalink");                                     mnotificationbean.image = jsonobject.getstring("image");                                     mnotificationbean.title = jsonobject.getstring("title");                                     mnotificationbean.videotype = jsonobject.getstring("videotype");                                     mnotificationbean.videoid = jsonobject.getstring("videoid");                                     mnotificationbean.desc = jsonobject.getstring("desc");                                     mnotificationbean.author_url = jsonobject.getstring("author_url");                                     mnotificationbean.like = jsonobject.getstring("like");                                     mnotificationbean.unlike = jsonobject.getstring("unlike");                                     mnotificationbean.comment = jsonobject.getint("comment");                                     //arrtemp.add(mnotificationbean);                                     musers.add(mnotificationbean);                                     log.v("arraylist size:: :: ", integer.tostring(musers.size()));                                     mrecyclerview.setadapter(museradapter);                                     museradapter.notifydatasetchanged();                                     museradapter.setloaded();                                  }                                 log.v("musers size:: :: ", integer.tostring(musers.size()));                                 arraylistsize = musers.size();                             }                             //madapter.notifydatasetchanged(); //                                    madapter = new notificationadapter(marraylist);                             // pdialog.dismiss();                         }                     } else {                         // pdialog.dismiss();                     }                 } catch (jsonexception e) {                     e.printstacktrace();                 }             }         }, new response.errorlistener() {             @override             public void onerrorresponse(volleyerror error) {                 toast.maketext(mainactivity.this, "check internet connection", toast.length_long).show();             }         }) {              @override              protected map<string, string> getparams() {                 map<string, string> params = new hashmap<string, string>();                 params.put("posts_per_page", integer.tostring(posts_per_page));                 params.put("type", type); //                params.put("fromsite", fromsite);                 return params;             }              @override             public map<string, string> getheaders() throws authfailureerror {                 map<string, string> params = new hashmap<string, string>();                 params.put("content-type", "application/x-www-form-urlencoded");                 return params;             }         };         sr.setretrypolicy(new defaultretrypolicy(                 15000,                 defaultretrypolicy.default_max_retries,                 defaultretrypolicy.default_backoff_mult));          queue.add(sr);      } } 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical"     tools:context=".mainactivity">      <android.support.v7.widget.recyclerview         android:id="@+id/recycleview"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:padding="8dp" /> </linearlayout> 

when loading must knowing position of top element of new loaded items. call:

recyclerview.scrolltoposition(position); 

and can use whenever want show specific item on current view, call function list position. example loading new item after every 80 items so, position of newly loaded item 80 can call:

recyclerview.scrolltoposition(80); 

just keep on updating position load more , more items.


Comments

Popular posts from this blog

java - Run spring boot application error: Cannot instantiate interface org.springframework.context.ApplicationListener -

reactjs - React router and this.props.children - how to pass state to this.props.children -

Excel VBA "Microsoft Windows Common Controls 6.0 (SP6)" Location Changes -