RecyclerView With Multiple Layouts

前端 未结 3 1148
刺人心
刺人心 2021-01-16 04:58

I am using RecyclerView to display text in CardView but I want to add a Header TextView at the top of the RecyclerView that looks like this:

相关标签:
3条回答
  • 2021-01-16 05:12

    Have to create different type of View holder and also have bind the data according to view holder views. This Question is already asked and answer Recyclerview and handling different type of row inflation here and it will help you

    0 讨论(0)
  • 2021-01-16 05:20

    If you want to add multiple types of views (more than 2 types) and not just a header and "normal" item, CommonsWare answer is perfect. But if the two mentioned types (header and item) are enough for you, the answer can be a lot simpler (from the practical point of view).

    There are two relatively simple libraries that you can use for that:

    1. RecyclerViewHeader - super simple to use, but uses a bit "hacky" approach, that sometimes can cause problems. Suitable for relatively simple headers.

    2. HeaderRecyclerView - Suitable for any type of header. Implements approach mentioned by CommonsWare to inflate two types of views. A bit more difficult to use than RecyclerViewHeader but nothing too hard to use on a daily basis.

    For disclosure: I am the author of the RecyclerViewHeader. I'm aware of its flaws, therefore I'm not trying to promote it as one-for-all solution, but more as an interesting alternative to complicating your adapter. HeaderRecyclerView is a nice piece of code that can simplify your work. I use it myself when my RecyclerView header gets complicated.

    0 讨论(0)
  • 2021-01-16 05:24

    You need to make three changes:

    1. Implement getItemViewType() on your RecyclerView.Adapter, to return a unique integer for each view type needed by your app, based on the supplied position. So, you would return one value for your header (presumably a position of 0) and another value for everything else.

    2. Pay attention to the viewType parameter passed into onCreateViewHolder(), and create an appropriate RecyclerView.ViewHolder as needed. This in turn probably means that you should have different ViewHolder classes for your header and detail rows.

    3. In onBindViewHolder(), apply binding logic based upon the type of the ViewHolder that you get, so you bind the appropriate data into the ViewHolder. You can use instanceof, or have the ViewHolder classes implement a common interface, or whatever to make this work.

    This sample app demonstrates a RecyclerView with section headers that implements the above steps.

    0 讨论(0)
提交回复
热议问题