【发布时间】:2018-12-30 10:38:54
【问题描述】:
我有以下代码来加载我的 ListView(每个项目都有一个图像和文本):
public View getView(final int i, View convertView, ViewGroup viewGroup) {
View view = inflater.inflate(R.layout.contact_inflater, null);
final Holder holder = new ContactAdapter.Holder();
holder.ivPhoto = (ImageView) view.findViewById(R.id.ivImage);
holder.tvFullName = (TextView) view.findViewById(R.id.tvName);
holder.tvPhoneNumber = (TextView) view.findViewById(R.id.tvPhoneNo);
holder.tvFullName.setText(Contact.get(i).get(0));
holder.tvPhoneNumber.setText(Contact.get(i).get(1));
holder.button = (Button) view.findViewById(R.id.ivButton);
Picasso.with(context)
.load(Contact.get(i).get(2))
.into(holder.ivPhoto);
return view;
}
问题是列表滚动不顺畅。如何让它顺利?
编辑:我已更改为 RecycleView,但忘记添加以下代码:
if(//IF//){
Log.d("InInIn!", "InInIn!");
//Turn to Tagged
}
当我把它变成一个 RecycleView 时,按钮会在整个过程中变成 Tagged,并且被标记的按钮会随着滚动而变化。按钮在各处都在变化,即使它们不应该发生变化。有什么问题?
【问题讨论】:
-
AFAIK,毕加索将异步加载图像。这里滚动的问题不是毕加索。这是您的 getView 实现中缺少viewholder pattern
-
如何修复我的视图模式?
-
改用 RecyclerView
-
我是初学者,如何改成recyclerView?
-
您不需要使用 RecyclerView,但至少需要更改 ViewHolder 代码。 ViewHolder 的重点是不必每次都调用
findViewById(参见developer.android.com/training/improving-layouts/… 和javacodegeeks.com/2013/09/…)。不过,毕加索的负载也可能是一个问题。您应该对其进行分析以查看慢的原因。
标签: android list listview android-asynctask