2011-08-21 4 views
6

XML 문서를 사용자 지정 어댑터에 바인딩하고 있습니다. 목록의 모든 항목은 기본적으로 흰색의 글꼴 색을가집니다. XML 문서의 노드 중 하나에는 확인중인 속성이 있고 속성이 설정된 경우 ListView에서 해당 항목의 글꼴 색을 더 어두운 색으로 변경하고 싶습니다. 내가 가지고있는 코드는 처음에는 작동하지만 목록을 위아래로 스크롤하면 ListView에서 흰색을 유지해야하는 항목이 짙은 색으로 자동 변경됩니다.ListView에서 TextView 글꼴 색을 동적으로 변경하십시오.

내 레이아웃 코드는 다음과 같습니다. 태그를 설정하기 전에에

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); 
    } 
} 

답변

16

의 ListView 뷰를 재사용이 코드를 시도하고 당신은 단지 회색 흰색에서 색상을 변경합니다. 색상을 다시 흰색으로 복원하지 마십시오. 나는 제안 된

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

이 좋습니다. 해결책을 본 후에 매우 단순 해 보입니다. 감사! –

1

이동 텍스트 및 컬러 설정 코드 :

<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> 

여기가 내 사용자 지정 어댑터입니다. 당신은 당신이 convertView를 얻을 getView에서 볼 수 있듯이,

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); 
관련 문제