[英]Android - ListView item style fails when scrolling
我的ListView
有問題。 我在多個項目中使用它們,並且在每個項目中都會發生錯誤。
在一種情況下,每個項目都有唯一的圖像,在另一種情況下,某些項目包含粗體文本,而有些則沒有。
當我滾動圖像/粗體文本時,其位置不正確;當我在某個點(如b )快速上下滾動時,幾乎所有項目都是粗體的。
我唯一能找到的帖子就是這個,但是並沒有解決問題。
這是我的自定義適配器:
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模式,在視圖持有人模式中android重用了現有的視圖。 因此,當重新使用以前生成的以粗體顯示的視圖時。 現在,如果嘗試渲染視圖但不滿足您已應用的條件,則僅渲染先前的粗體字型。 因此,以下方法可以解決您的問題:
holder.item_one.setTypeface(null, Typeface.NORMAL);
//here I set the boldness
if(condition) {
holder.item_one.setTypeface(null, Typeface.BOLD);
}
對於Image,請使用ImageLoader。 這就是我使用的,非常易於定制。
如果TextView應該為粗體,則將其設置為粗體。 如果需要正常,請將其設置為正常。 ListView回收視圖,因此您需要為每個視圖手動設置首選項。
如果您必須在某個預定義的特定位置加粗,請執行以下操作,
@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);
if(position==2 || position==5) {
holder.item_one.setTypeface(null, Typeface.BOLD);
holder.item_one.setText(objectItem .getItemOne());
}
else
holder.item_two.setText(objectItem .getItemTwo());
return convertView;
}
但是請記住,如果刪除“ else”,它將無法正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.