回收视图
我正在添加图库中的图像和编辑文本中的文本。
两个数组用于获取两个不同的视图:
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,即使它是动态的。看看这个链接Multiple View types in a recyclerview。
在列表中添加不同的元素后,recycleler视图会为您提供getItemViewType
函数,该函数允许您指定哪个视图需要为哪个项目充气。至于动态添加元素,您可以将元素添加到列表中,并通过使用适配器提供的各种辅助函数(例如notifyItemChanged
,notifyItemRangeInserted
等)来了解recyclerview适配器。更多链接Recycler View Adapter Documentation
关于图像的大小,实际上并不属于recyclelerview支架,这是基于您的自定义逻辑,您可以将imageview设置为40x40,或者可以使其成为match_parent,您可以控制正在充气的视图用填充膨胀视图的逻辑。
public int getItemViewType(int position) {
if (modellist.get(position).IfImage() != null) {
return VIEW_TYPE_FIRST;
} else {
return VIEW_TYPE_SECOND;
}
}