gpt4 book ai didi

java - Android - ListView 项目样式在滚动时失败

转载 作者:行者123 更新时间:2023-12-01 23:41:09 25 4
gpt4 key购买 nike

我的 ListView 有问题。我在几个项目中使用它们,并且每个项目都会出现错误。

在一种情况下,每个项目都有一个唯一的图像,在另一种情况下,有些项目包含粗体文本,有些则不包含。

当我滚动时,图像/粗体文本不在正确的位置,并且当我在某个时刻再次快速上下滚动时(如果b),几乎所有项目都是粗体。

我能找到的唯一帖子是 this one但并没有解决问题。

这是我的自定义适配器:

private class MyAdapter extends BaseAdapter {

private List<Object> obj;
private LayoutInflater inflater;

public MyAdapter(Context context, List<Object> obj_list) {
this.obj_list = obj_list;
this.inflater = LayoutInflater.from(context);
}

public int getCount(){
return this.obj_list.size();
}

public Object getItem(int position){
return this.obj_list.get(position);
}

public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null){
convertView = inflater.inflate(R.layout.my_row_layout, null);
holder = new ViewHolder();
holder.item_one = (TextView)convertView.findViewById(R.id.txtItemOne);
holder.item_two = (TextView)convertView.findViewById(R.id.txtItemTwo);

convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}

Object objectItem = getItem(position);

//here I set the boldness
if(condition) {
holder.item_one.setTypeface(null, Typeface.BOLD);
}

holder.item_one.setText(objectItem .getItemOne());
holder.item_two.setText(objectItem .getItemTwo());

return convertView;
}

class ViewHolder {
TextView hItemOne;
TextView hItemTwo;
}
}

有人知道我可能做错了什么吗?或者至少遇到过同样的问题?

谢谢!

最佳答案

问题是因为您正在使用 ViewHolder 模式,在 View 持有者模式中 android 重用现有 View 。因此,当它重用以前生成的粗体 View 时。现在,如果当它尝试渲染 View 但无法满足您应用的条件时,它只会渲染之前的粗体字体。因此以下内容可以解决您的问题:

holder.item_one.setTypeface(null, Typeface.NORMAL);
//here I set the boldness
if(condition) {
holder.item_one.setTypeface(null, Typeface.BOLD);
}

关于java - Android - ListView 项目样式在滚动时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17940604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com