关于RecyclerViews能力的讨论

时间:2016-09-30 13:40:54

标签: android listview android-recyclerview android-adapter

要显示项目列表,我通常使用RecyclerView,但我有一个要求,这使我更容易使用垂直LinearLayout。我不想放弃RecyclerView的良好资源管理,所以我正在寻找一个不同的解决方案,并希望有人可以帮助我。

我想到了一个顶部有一些视图的布局,然后是一个项目列表,后面跟着一些更多的视图。或者包含多个RecyclerView的布局。所以你在顶部有一些视图,一个项目列表后跟一些更多的视图和另一个项目列表等。

我的布局可能如下所示:

  • 视图1
  • 视图2
  • RecyclerView
  • VIEW3
  • RecyclerView
  • View4

通常,RecyclerView的工作方式类似于可滚动的框架,您可以在其中滚动某些内容。这意味着如果你开始滚动,你的整个屏幕会卡在某个位置,你只是在RecyclerView中滚动直到它结束。然后,您可以继续滚动整个屏幕。

我想要的是一个完全膨胀的RecyclerView,因此您总是滚动整个屏幕,而不仅仅是RecyclerView而不是丢失RecyclerView的资源管理。

有人知道这个的解决方案吗?

3 个答案:

答案 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(...);
                 //...
             }
        }
    }

希望这有助于=)

相关问题