【发布时间】:2015-11-15 15:55:18
【问题描述】:
我正在使用自定义 CompoundView 扩展 LinearLayout 来显示 RecyclerView 的项目。每个项目显示一篇包含多个段落和图像的文章。
CompoundView根据CompoundView.setData(List<DataPiece> pieces)附加的数据动态添加TextView或ImageView,附加数据前未知数量。
每个DataPiece 对象告诉CompoundView 它是一段文字还是一张图片。这是CompoundView.setData(List<DataPiece> pieces)的代码:
public void setData(List<DataPiece> pieces) {
removeAllViews();
for (DataPiece dataPiece : pieces) {
switch (dataPiece.getType()) {
case IMAGE:
ImageView imageView = new ImageView(getContext());
...
addView(imageView);
break;
case TEXT:
TextView textView = new TextView(getContext());
...
addView(textView);
break;
}
}
}
在RecyclerView.Adapter.onBindViewHolder() 中,数据通过调用MyViewHolder.compoundView.setData(...) 附加到CompoundView。创建 RecyclerView 时它工作正常。
但是,对于具有多个 ImageViews 和 TextViews 的 CompoundView 项目,当我滚动离开它然后向后滚动时,滚动变得非常不流畅。
我猜是因为setData()中的removeAllViews()被调用了,而CompoundView创建for循环又被回收器执行了。但我不知道如何避免这种情况。
而且我还想知道为什么在RecyclerView 中使用TextView(with Images) 时滚动总是很平滑,即使它也被回收了。
提前致谢!
【问题讨论】:
-
如果您将自定义/复合
View仅用于要创建的RecyclerView列表,则最好为一个列表项创建 XML 布局,然后使用 @ 987654346@ 的内置方法可将数据添加到列表项中的Views。 -
@FarbodSalamat-Zadeh 谢谢!但是
TextViews 和ImageView的数量在附加数据之前是不确定的。所以我必须在一个项目中动态添加Views。
标签: android performance android-layout android-view android-recyclerview