RecyclerView header and footer
RecyclerView header and footer
Maybe this question has been asked before, but I could not seem to find a precise answer or solution. I started using the RecyclerView, and I implemented it using the LinearLayoutManager. Now I want to add custom header and footer items, that differ from the rest of the items in my RecyclerView. The header and footer should not be sticky, I want them to scroll with the rest of the items. Can somebody point out some example how to do this or just share ideas. I will appreciate it very much. Thx
Answer by Bronx for RecyclerView header and footer
in your adapter add this class:
private class VIEW_TYPES { public static final int Header = 1; public static final int Normal = 2; public static final int Footer = 3; }
then Override the following method like this:
@Override public int getItemViewType(int position) { if(items.get(position).isHeader) return VIEW_TYPES.Header; else if(items.get(position).isFooter) return VIEW_TYPES.Footer; else return VIEW_TYPES.Normal; }
Now in the onCreateViewHolder method inflate your layout based on the view type::
@Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View rowView; switch (i) { case VIEW_TYPES.Normal: rowView=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.normal, viewGroup, false); break; case VIEW_TYPES.Header: rowView=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.header, viewGroup, false); break; case VIEW_TYPES.Footer: rowView=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.footer, viewGroup, false); break; default: rowView=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.normal, viewGroup, false); break; } return new ViewHolder (rowView); }
Hope this can help.
Answer by F.Will for RecyclerView header and footer
Click here. I did a extension of RecyclerView.Adapter. Easy to add header and footer.
class HFAdapter extends HFRecyclerViewAdapter{ public HFAdapter(Context context) { super(context); } @Override public DataViewHolder onCreateDataItemViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.data_item, parent, false); return new DataViewHolder(v); } @Override public void onBindDataItemViewHolder(DataViewHolder holder, int position) { holder.itemTv.setText(getData().get(position)); } class DataViewHolder extends RecyclerView.ViewHolder{ TextView itemTv; public DataViewHolder(View itemView) { super(itemView); itemTv = (TextView)itemView.findViewById(R.id.itemTv); } } } //add header View headerView = LayoutInflater.from(this).inflate(R.layout.header, recyclerView, false); hfAdapter.setHeaderView(headerView); //add footer View footerView = LayoutInflater.from(this).inflate(R.layout.footer, recyclerView, false); hfAdapter.setFooterView(footerView); //remove hfAdapter.removeHeader(); hfAdapter.removeFooter();
Answer by David Medenjak for RecyclerView header and footer
This is very easy with ItemDecorations and without modifying any other code:
recyclerView.addItemDecoration(new HeaderDecoration(this, recyclerView, R.layout.test_header));
Reserve some space for drawing, inflate the layout you want drawn and draw it in the reserved space.
The code for the Decoration:
public class HeaderDecoration extends RecyclerView.ItemDecoration { private View mLayout; public HeaderDecoration(final Context context, RecyclerView parent, @LayoutRes int resId) { // inflate and measure the layout mLayout = LayoutInflater.from(context).inflate(resId, parent, false); mLayout.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); } @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { super.onDraw(c, parent, state); // layout basically just gets drawn on the reserved space on top of the first view mLayout.layout(parent.getLeft(), 0, parent.getRight(), mLayout.getMeasuredHeight()); for (int i = 0; i <
Answer by lopez.mikhael for RecyclerView header and footer
You can use this GitHub] library to add a Header or Footer to your RecyclerView
in the simplest way possible.
You need to add the HFRecyclerView library in your project or you can also grab it from Gradle:
compile 'com.mikhaellopez:hfrecyclerview:1.0.0'
This library is based on a work at @hister
This is a result in image:
Answer by Gustavo for RecyclerView header and footer
You can use the library SectionedRecyclerViewAdapter, it has the concept of "Sections", where which Section has a Header, Footer and Content (list of items). In your case you might only need one Section but you can have many:
1) Create a custom Section class:
class MySection extends StatelessSection { List myList = Arrays.asList(new String[] {"Item1", "Item2", "Item3" }); public MySection() { // call constructor with layout resources for this Section header, footer and items super(R.layout.section_header, R.layout.section_footer, R.layout.section_item); } @Override public int getContentItemsTotal() { return myList.size(); // number of items of this section } @Override public RecyclerView.ViewHolder getItemViewHolder(View view) { // return a custom instance of ViewHolder for the items of this section return new MyItemViewHolder(view); } @Override public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) { MyItemViewHolder itemHolder = (MyItemViewHolder) holder; // bind your view here itemHolder.tvItem.setText(myList.get(position)); } }
2) Create a custom ViewHolder for the items:
class MyItemViewHolder extends RecyclerView.ViewHolder { private final TextView tvItem; public MyItemViewHolder(View itemView) { super(itemView); tvItem = (TextView) itemView.findViewById(R.id.tvItem); } }
3) Set up your ReclyclerView with the SectionedRecyclerViewAdapter
// Create an instance of SectionedRecyclerViewAdapter SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter(); MySection mySection = new MySection(); // Add your Sections sectionAdapter.addSection(mySection); // Set up your RecyclerView with the SectionedRecyclerViewAdapter RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(sectionAdapter);
Answer by Xiong for RecyclerView header and footer
May be GroupAdapter is what you want.
A specialized RecyclerView.Adapter that presents data from a sequence of RecyclerView.Adapter. The sequence is static but each adapter can be presented in zero or more item views. The child adapter can use ViewType safely. In addition, we can addHeaderView or addFooterView like ListView.
Answer by Harpreet for RecyclerView header and footer
For Sectioned LinearView headings with GridView items in Recyclerview:-
Check SectionedGridRecyclerViewAdapter
Fatal error: Call to a member function getElementsByTagName() on a non-object in D:\XAMPP INSTALLASTION\xampp\htdocs\endunpratama9i\www-stackoverflow-info-proses.php on line 72
0 comments:
Post a Comment