我知道这在StackOverflow上被反复问过,但是我已经经历了一堆问题/答案,无法真正弄清楚我的代码有什么问题。这是我的自定义适配器中的 getView 代码:
@Override public View getView(int position, View view, ViewGroup parent) {
ViewHolder holder;
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.friend_list_item, parent, false);
holder = new ViewHolder();
holder.image = (ImageView) view.findViewById(R.id.friend_pic);
holder.text = (TextView) view.findViewById(R.id.friend_name);
holder.num_classes = (TextView) view.findViewById(R.id.shared_classes);
holder.text.setTypeface(face);
holder.num_classes.setTypeface(lightface);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
// Build Shared Classes text
FriendDataHolder fdh = getItem(position);
String classesText = fdh.getClassesText();
if(classesText != "") holder.num_classes.setText(classesText);
holder.text.setText(fdh.getName());
// Trigger the download of the URL asynchronously into the image view.
String imageUrl= "http://graph.facebook.com/" + getItemId(position) + "/picture?type=square";
Picasso.with(context)
.load(imageUrl)
.placeholder(R.drawable.fb_default)
.into(holder.image);
return view;
}
我无法弄清楚的有趣事情是,我的图像/名称都没有混淆,而只有类文本。任何帮助将不胜感激!
if(classesText != "") holder.num_classes.setText(classesText);// this is the problem,
如果您为项目 1 设置了一个值,例如"test",并且第 10 项正在重用视图,如果 classText 为空或 null,则 u 不会更新该值,因此它将显示第 10 项的"test"也有 else 情况来设置空文本或默认值
if(classesText != "") holder.num_classes.setText(classesText); else {holder.num.classes.setText("")}
你应该替换这个
if(classesText != "") holder.num_classes.setText(classesText);
跟
if(classesText != "") {holder.num_classes.setText(classesText);}
else {holder.num.classes.setText("")}
试试这种方式
@Override
public View getView(int position, View view, ViewGroup parent) {
ViewHolder holder;
if ((view == null) || (view.getTag() == null)) { // UPDATE HERE
view = LayoutInflater.from(context).inflate(R.layout.friend_list_item, parent, false);
holder = new ViewHolder();
holder.image = (ImageView) view.findViewById(R.id.friend_pic);
holder.text = (TextView) view.findViewById(R.id.friend_name);
holder.num_classes = (TextView) view.findViewById(R.id.shared_classes);
holder.text.setTypeface(face);
holder.num_classes.setTypeface(lightface);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
// Build Shared Classes text
FriendDataHolder fdh = getItem(position);
String classesText = fdh.getClassesText();
if(classesText != "") holder.num_classes.setText(classesText);
holder.text.setText(fdh.getName());
// Trigger the download of the URL asynchronously into the image view.
String imageUrl= "http://graph.facebook.com/" + getItemId(position) + "/picture?type=square";
Picasso.with(context)
.load(imageUrl)
.placeholder(R.drawable.fb_default)
.into(holder.image);
view.setTag(holder); // updata here
return view;
}