android - Giving more spacing between 3 and 4 row item in Recycler GridLayoutManager -


i using recyclerview gridlayoutmanager layout bus ticket booking. works fine except place stuck logics have use leave more spacing between 3 , 4 column item in rows. layout should screenshot attached below.

my requirement:

enter image description here

current output:

enter image description here

i posting complete recyclerview gridlayoutmanager reference follows

multiselectrecyclerviewadapter.java

public class multiselectrecyclerviewadapter extends selectableadapter<multiselectrecyclerviewadapter.viewholder> {      private arraylist<string> marraylist;     private context mcontext;     private viewholder.clicklistener clicklistener;        public multiselectrecyclerviewadapter (context context, arraylist<string> arraylist,viewholder.clicklistener clicklistener) {         this.marraylist = arraylist;         this.mcontext = context;         this.clicklistener = clicklistener;      }      // create new views     @override     public multiselectrecyclerviewadapter.viewholder oncreateviewholder(viewgroup parent,                                                              int viewtype) {          view itemlayoutview = layoutinflater.from(parent.getcontext()).inflate(                 r.layout.row_multiselect, null);          viewholder viewholder = new viewholder(itemlayoutview,clicklistener);          return viewholder;     }      @override     public void onbindviewholder(viewholder viewholder, int position) {          viewholder.tvname.settext(marraylist.get (position));          viewholder.selectedoverlay.setvisibility(isselected(position) ? view.visible : view.invisible);      }      @override     public int getitemcount() {         return marraylist.size();     }      public static class viewholder extends recyclerview.viewholder  implements view.onclicklistener,view.onlongclicklistener  {          public textview tvname;         private clicklistener listener;         private final view selectedoverlay;           public viewholder(view itemlayoutview,clicklistener listener) {             super(itemlayoutview);              this.listener = listener;              tvname = (textview) itemlayoutview.findviewbyid(r.id.tvname);             selectedoverlay = (view) itemview.findviewbyid(r.id.selected_overlay);              itemlayoutview.setonclicklistener(this);              itemlayoutview.setonlongclicklistener (this);         }          @override         public void onclick(view v) {             if (listener != null) {                 listener.onitemclicked(getadapterposition ());             }         }         @override         public boolean onlongclick (view view) {             if (listener != null) {                 return listener.onitemlongclicked(getadapterposition ());             }             return false;         }          public interface clicklistener {             public void onitemclicked(int position);              public boolean onitemlongclicked(int position);         }         }     } 

multiselectrecyclerviewactivity.java

public class multiselectrecyclerviewactivity extends appcompatactivity implements multiselectrecyclerviewadapter.viewholder.clicklistener {      private toolbar toolbar;      private recyclerview mrecyclerview;     private multiselectrecyclerviewadapter madapter;     private recyclerview.layoutmanager mlayoutmanager;      private arraylist<string> marraylist  = new arraylist<string>();      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate (savedinstancestate);         setcontentview(r.layout.activity_multiselect);         toolbar = (toolbar) findviewbyid(r.id.toolbar);           (int = 1; <= 48; i++) {              marraylist.add ( ""+ i);         }          if (toolbar != null) {             setsupportactionbar(toolbar);             getsupportactionbar().settitle("multiselectrecylcerview");          }          mrecyclerview = (recyclerview) findviewbyid(r.id.my_recycler_view);         mrecyclerview.sethasfixedsize(true);         mrecyclerview.setlayoutmanager(new gridlayoutmanager (this,4));         madapter = new multiselectrecyclerviewadapter (multiselectrecyclerviewactivity.this,marraylist,this);         mrecyclerview.setadapter (madapter);       }      @override     public void onitemclicked (int position) {          toggleselection(position);     }      @override     public boolean onitemlongclicked (int position) {         toggleselection(position);          return true;     }      private void toggleselection(int position) {         madapter.toggleselection (position);      } } 

what have tried in coding:

i have followed gist assign spacing grid items using itemdecoration below. unfortunately able assign spacing equally between items.

mrecyclerview.setlayoutmanager(new gridlayoutmanager(context, num_columns); itemoffsetdecoration itemdecoration = new itemoffsetdecoration(context, r.dimen.item_offset); mrecyclerview.additemdecoration(itemdecoration); 

kindly please me kind of tips , solutions solve case. stuck how proceed requirement , logic using recyclerview considered should optimized approach. in advance.

using item decoration here create problems. if planning handle click on item, clicking on blank space interpreted click on items located in inner columns.

you can configure gridlayoutmanager handling 1 more column , handle space specific view type. here put code implementing approach.

hope help.


Comments

Popular posts from this blog

java - pagination of xlsx file to XSSFworkbook using apache POI -

Unlimited choices in BASH case statement -

apache - How do I stop my index.php being run twice for every user -