2011-08-21 92 views
6

Tôi đang ràng buộc một tài liệu XML với một bộ điều hợp tùy chỉnh. Tất cả các mục trong danh sách ban đầu có màu phông chữ màu trắng. Một trong các nút trong tài liệu XML có thuộc tính mà tôi đang kiểm tra và nếu thuộc tính được đặt, tôi muốn thay đổi màu phông chữ của mục đó trong ListView thành màu tối hơn. Mã tôi dường như làm việc ban đầu, nhưng nếu tôi cuộn danh sách lên và xuống, các mục trong ListView sẽ vẫn trắng, tự động thay đổi thành màu tối, vì một số lý do:tự động thay đổi màu phông chữ TextView trong ListView

Đây là mã bố cục của tôi:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical"> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:textSize="15dip" 
    android:textColor="#ffffff" 
    android:textStyle="bold" 
    android:padding="5px" 
    /> 
</LinearLayout> 

và đây là bộ chuyển đổi tùy chỉnh của tôi:

private class CustomAdapter extends BaseAdapter 
{  
    private ArrayList<FilterItem> mData = new ArrayList<FilterItem>(); 
    private LayoutInflater mInflater; 

    public CustomAdapter() { 
     mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    public void addItem(FilterItem item) { 
     mData.add(item); 
    } 

    @Override 
    public int getCount() { 
     return mData.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return mData.get(position); 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     ViewHolder holder; 
     FilterItem item = (FilterItem)this.getItem(position); 

     if (convertView == null) 
     { 

      holder = new ViewHolder(); 

      convertView = mInflater.inflate(R.layout.main, null); 
      holder.text = (TextView)convertView.findViewById(R.id.text); 

      convertView.setTag(holder); 

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

      TextView tvText = holder.text; 

      tvText.setText(item.getTitle()); 

      if (item.Read()) 
      { 
       tv.setTextColor(Color.Gray); 
      } 

     return(convertView); 
    } 
} 

Trả lời

16

Xem lại dạng xem lại, như bạn có thể thấy trong getView bạn nhận được convertView và bạn chỉ thay đổi màu từ trắng sang xám. Bạn không bao giờ khôi phục lại màu trắng. Tôi đề xuất

if (item.Read()) { 
    tv.setTextColor(Color.Gray); 
} else { 
    tv.setTextColor(Color.White); 
} 
+0

hoạt động. có vẻ đơn giản sau khi nhìn thấy giải pháp. cảm ơn! –

1

Move văn bản và màu sắc thiết lập mã để trước khi thiết lập thẻ. Hãy thử mã này

if (convertView == null) 
    { 

     holder = new ViewHolder(); 

     convertView = mInflater.inflate(R.layout.main, null); 
     holder.text = (TextView)convertView.findViewById(R.id.text); 
     TextView tvText = holder.text; 
     tvText.setText(item.getTitle()); 
     if (item.Read()) 
     { 
      tv.setTextColor(Color.Gray); 
     } 
     convertView.setTag(holder); 

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

     TextView tvText = holder.text; 
     tvText.setText(item.getTitle()); 
     if (item.Read()) 
     { 
      tv.setTextColor(Color.Gray); 
     } 
    } 
    return(convertView); 
Các vấn đề liên quan