如何实现 2 个未知大小的不同视图?

How to implement 2 different views of unknown size?

回收站视图

我正在添加图库中的 图片edit text 中的文字。

用于获取两个不同视图的两个数组:
private ArrayList<Bitmap> mImages = new ArrayList<Bitmap>(); private ArrayList<String> mDataSet = new ArrayList<String>();

问题: 我的 getItemViewType 方法显示 Array out of index exception 并且没有正确获取视图。

`@Override
public int getItemViewType(int position) {
        if(modellist1.get(position) instanceof Bitmap) {
            Log.d(TAG, "GETTING IMAGE VIEW TYPE");
            return VIEW_TYPE_FIRST;
        }
        else if (modellist2.get(position) instanceof String) {
            Log.d(TAG, "GETTING TEXT VIEW TYPE");
            return VIEW_TYPE_SECOND;
     }`

我认为您不需要管理 2 个单独的列表来填充 recyclerview,即使它是动态的。 看看这个 link Multiple View types in a recyclerview.

在列表中添加不同的元素后,回收器视图会为您提供一个函数 getItemViewType,让您指定需要为哪个项目扩充哪个视图。 至于动态添加元素,您可以将元素添加到列表中,并通过使用适配器提供的各种辅助函数让 recyclerview 适配器知道,例如 notifyItemChangednotifyItemRangeInserted 等。 更多内容在此 link Recycler View Adapter Documentation

关于图像的大小,这并不真正属于 recyclerview 括号,这是基于您的自定义逻辑,您可以将 imageview 设为 40x40,也可以将其设为 match_parent,您有正在膨胀的视图的控制以及填充膨胀视图的逻辑。

public int getItemViewType(int position) {
    if (modellist.get(position).IfImage() != null) {
            return VIEW_TYPE_FIRST;
        } else {
            return VIEW_TYPE_SECOND;
        }

    }