簡體   English   中英

Android-滾動時ListView項目樣式失敗

[英]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);
}
  1. 對於Image,請使用ImageLoader。 就是我使用的,非常易於定制。

  2. 如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM