【问题标题】:Recyclerview with multiple dynamic types view具有多种动态类型视图的 Recyclerview
【发布时间】:2015-10-09 15:15:27
【问题描述】:

我对@9​​87654323@的项目类型是动态的有疑问。这意味着我不知道Recyclerview的项目有多少种类型。所以我不知道如何写onCreateViewHolder()MyAdapter extends RecyclerView.Adpter<RecylerView.ViewHolder>.

但事实上,物品遵循一些规律。例如:

项目1:

Text(title)
Pic(Vertical) Pic(Vertical) Pic(Vertical)
Pic(Vertical) Pic(Vertical) Pic(Vertical)

项目2:

Text(title)
Pic(Horizontal) Pic(Horizontal)
Pic(Horizontal) Pic(Horizontal)

如果图片是垂直的,则列是三。如果图片是水平的,则列是二。图片的数量可能是一,二,三,四,五,六等等,所以我的类型无法确认。 对不起,我不能显示图片。我有一个问题RecyclerView with GridView

但这并不能解决我的问题。我看到了How to create RecyclerView with multiple view type?

但是类型没有改变。 PS:我从数据中知道图片是垂直的还是水平的。

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

    您不能创建两个自定义 ViewHolder 并检查哪个正在传递给 onCreateviewHolder,如本答案所示? How to create RecyclerView with multiple view type?

    public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    
    class ViewHolder0 extends RecyclerView.ViewHolder {
       //viewHolder for horitzontal pics
        ...
    }
    
    class ViewHolder2 extends RecyclerView.ViewHolder {
        ...
        //viewHolder for vertical pics
    }
    
    @Override
    public int getItemViewType(int position) {
        // Just as an example, return 0 or 2 depending on position
        // Note that unlike in ListView adapters, types don't have to be contiguous
        return position % 2 * 2;
    }
    
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         switch (viewType) {
             case 0: return new ViewHolder0(...);
             case 2: return new ViewHolder2(...);
             ...
         }
    }
    

    }

    docs 你可以扩展 RecyclerView.ViewHolder

    // Provide a reference to the views for each data item
    // Complex data items may need more than one view per item, and
    // you provide access to all the views for a data item in a view holder
    public static class ViewHolder extends RecyclerView.ViewHolder {
        // each data item is just a string in this case
        public TextView mTextView;
        public ViewHolder(TextView v) {
            super(v);
            mTextView = v;
        }
    }
    

    【讨论】:

    • 你想在 onBindViewHolder(ViewHolder holder, int position) 中绑定的数据如何?在这里你可以只做一个 for 并循环遍历你得到的图像
    • 我在哪里写一个 for 并遍历我得到的图像?你确定你知道我的问题的意思吗?
    • 在适配器构造函数中,我假设您正在获取您的数据:视图、图片...在您的 onCreateViewHolder 中,您可以从 viewHolder 切换,在 onCreateViewHolder 中,您可以遍历来自您的构造函数属性的数据并将视图添加到viewHolder 以编程方式 (ViewGroup) view.addView() developer.android.com/intl/es/reference/android/view/…, int, android.view.ViewGroup.LayoutParams)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多