Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamically change the number of columns of a GridLayoutManager

Tags:

I am actually using a GridLayoutManager with two columns in my app and I would like to have one column depending on the view type used.

Here is the code I have in the method "onCreateView()" of my fragment :

// Recycler view for users usersList = (RecyclerView) mView.findViewById(R.id.usersList);  // Layout manager (grid of users layoutManager = new GridLayoutManager(mContext, 2); usersList.setLayoutManager(layoutManager);  // ArrayList of users users = new ArrayList<User>();  // Set the adapter for the list of users mHomeListAdapter = new HomeListAdapter(getActivity(), users); usersList.setAdapter(mHomeListAdapter); 

Then, in my adapter, I have this kind of code :

@Override public int getItemViewType(int position) {     if (position == 5) {         return TYPE_PREMIUM;     } else {         return TYPE_ITEM;     } }  @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {     if (viewType == TYPE_PREMIUM) {         View view = mInflater.inflate(R.layout.become_premium, parent, false);         HeaderViewHolder holder = new HeaderViewHolder(view);         return holder;     } else {         View view = mInflater.inflate(R.layout.posts_item, parent, false);         ViewHolderPosts holder = new ViewHolderPosts(view);         return holder;     } } 

So, when the view "TYPE_PREMIUM" is used, I would like to display a button (so in one column) and have a normal gridview (two columns) for the other results.

Is it possible to do this?

Thanks!

like image 523
fraxool Avatar asked Jun 12 '15 16:06

fraxool


2 Answers

mGridLayoutManager = new GridLayoutManager(mContext, 2); mGridLayoutManager.setSpanSizeLookup(onSpanSizeLookup);      /**  * Helper class to set span size for grid items based on orientation and device type  */ GridLayoutManager.SpanSizeLookup onSpanSizeLookup = new GridLayoutManager.SpanSizeLookup() {     @Override     public int getSpanSize(int position) {         return mHomeListAdapter.getItemViewType(position) == TYPE_PREMIUM ? 2 : 1;     } }; 
like image 65
android.fryo Avatar answered Sep 22 '22 04:09

android.fryo


If I understand your question, you would like to let premium-type Views span 2 columns instead of 1? That's possible by setting a custom SpanSizeLookup with setSpanSizeLookup(SpanSizeLookup).

like image 35
Coen B Avatar answered Sep 20 '22 04:09

Coen B