关于RecyclerViews能力的讨论

Discussion on RecyclerViews ability

为了显示项目列表,我通常使用 RecyclerView,但我有一个要求可以更轻松地使用垂直 LinearLayout。我不想失去 RecyclerView 良好的资源管理,所以我正在寻找不同的解决方案,希望有人能帮助我。

我想到一个布局,顶部有一些视图,然后是项目列表,然后是底部的更多视图。或者包含多个 RecyclerView 的布局。因此,您在顶部有一些视图,一个项目列表,然后是更多视图和另一个项目列表等。

我的布局可能如下所示:

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

我想要的是一个完全膨胀的 RecyclerView,这样您就可以始终滚动整个屏幕,而不仅仅是 RecyclerView,但又不会失去 RecyclerView 的资源管理。

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

在这种情况下,我只使用一个 RecycleView 实现我自己的 getItemViewType

将以下代码添加到您的回收站视图的自定义适配器中

  @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        if (viewType == ITEM_TYPE_NORMAL) {
            View normalView = LayoutInflater.from(getContext()).inflate(R.layout.my_normal_row, null);
            return new MyNormalViewHolder(normalView); // view holder for normal items
        } else if (viewType == ITEM_TYPE_HEADER) {
            View headerRow = LayoutInflater.from(getContext()).inflate(R.layout.my_header_row, null);
            return new MyHeaderViewHolder(headerRow); // view holder for header items
        }
    }

我的建议是使用带有自定义适配器的单个 recyclerview,并使用 diff 布局为 recyclerview 的每一行充气,即....根据您的情况

最佳答案取决于您希望整个屏幕的行为。

"What I want is a RecyclerView that is fully inflated so you are always scrolling the whole screen instead of just the RecyclerView but not loosing the resource management of the 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(...);
                 //...
             }
        }
    }

希望这对您有所帮助 =)