要显示项目列表,我通常使用RecyclerView,但我有一个要求,这使我更容易使用垂直LinearLayout。我不想放弃RecyclerView的良好资源管理,所以我正在寻找一个不同的解决方案,并希望有人可以帮助我。
我想到了一个顶部有一些视图的布局,然后是一个项目列表,后面跟着一些更多的视图。或者包含多个RecyclerView的布局。所以你在顶部有一些视图,一个项目列表后跟一些更多的视图和另一个项目列表等。
我的布局可能如下所示:
通常,RecyclerView的工作方式类似于可滚动的框架,您可以在其中滚动某些内容。这意味着如果你开始滚动,你的整个屏幕会卡在某个位置,你只是在RecyclerView中滚动直到它结束。然后,您可以继续滚动整个屏幕。
我想要的是一个完全膨胀的RecyclerView,因此您总是滚动整个屏幕,而不仅仅是RecyclerView而不是丢失RecyclerView的资源管理。
有人知道这个的解决方案吗?
答案 0 :(得分:1)
将以下代码添加到您的回收站视图的自定义适配器
objdump
我的建议是使用带有自定义适配器的单一回收站视图,并根据您的情况使用差异布局对每行Recyclerview进行充气,即......
答案 1 :(得分:0)
在这种情况下,我只使用一个RecycleView
来实现我自己的getItemViewType
答案 2 :(得分:0)
最佳答案取决于您对整个屏幕的行为。
“我想要的是一个完全膨胀的RecyclerView,所以你总是滚动整个屏幕,而不仅仅是RecyclerView,但不会丢失RecyclerView的资源管理。”
这个要求让我觉得最好的选择确实是一个使用不同ViewHolder类型的RecyclerView,比如@Rissmon Suresh和@betorcs提到的。
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
class HeaderViewHolder extends RecyclerView.ViewHolder {
...
}
class NormalViewHolder1 extends RecyclerView.ViewHolder {
...
}
@Override
public int getItemViewType(int position) {
// use position to decide what kind of View you want
// can be fixed or you can access the data to check dinamically
if(position == 0)
return 0;
else
return 1;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0: return new HeaderViewHolder(...);
case 1: return new NormalViewHolder1(...);
//...
}
}
}
希望这有助于=)