Adding header view to recyclerview with gridlayout manager
Android Adding header view to recyclerview with gridlayout manager:
To add a header to a recyclerview with a gridlayout, first the adapter needs to be told that the header view is the first position - rather than the standard cell used for the content. Next, the layout manager must be told that the first position should have a span equal to the *span count of the entire list.
Take a regular RecyclerView.Adapter class and configure it as follows:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class HeaderAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | |
private static final int ITEM_VIEW_TYPE_HEADER = 0; | |
private static final int ITEM_VIEW_TYPE_ITEM = 1; | |
private List<YourModel> mModelList; | |
public HeaderAdapter (List<YourModel> modelList) { | |
mModelList = modelList; | |
} | |
public boolean isHeader(int position) { | |
return position == 0; | |
} | |
@Override | |
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { | |
LayoutInflater inflater = LayoutInflater.from(parent.getContext()); | |
if (viewType == ITEM_VIEW_TYPE_HEADER) { | |
View headerView = inflater.inflate(R.layout.header, parent, false); | |
return new HeaderHolder(headerView); | |
} | |
View cellView = inflater.inflate(R.layout.gridcell, parent, false); | |
return new ModelHolder(cellView); | |
} | |
@Override | |
public int getItemViewType(int position) { | |
return isHeader(position) ? ITEM_VIEW_TYPE_HEADER : ITEM_VIEW_TYPE_ITEM; | |
} | |
@Override | |
public void onBindViewHolder(RecyclerView.ViewHolder h, int position) { | |
if (isHeader(position)) { | |
return; | |
} | |
final YourModel model = mModelList.get(position -1 ); // Subtract 1 for header | |
ModelHolder holder = (ModelHolder) h; | |
// populate your holder with data from your model as usual | |
} | |
@Override | |
GoalKicker.com – Android™ Notes for Professionals 142 | |
public int getItemCount() { | |
return _categories.size() + 1; // add one for the header | |
} | |
} | |
Then in the activity/fragment: | |
final HeaderAdapter adapter = new HeaderAdapter (mModelList); | |
final GridLayoutManager manager = new GridLayoutManager(); | |
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { | |
@Override | |
public int getSpanSize(int position) { | |
return adapter.isHeader(position) ? manager.getSpanCount() : 1; | |
} | |
}); | |
mRecyclerView.setLayoutManager(manager); | |
mRecyclerView.setAdapter(adapter); |
Comments :
Post a Comment