使用SimpleCursorAdapter.ViewBinder更改View的颜色

时间:2013-02-10 11:31:41

标签: java android listview

我有一个listview,想根据从SQLite数据库中检索到的某些条件更改View (@+id/panel)颜色。

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

     <LinearLayout
         android:layout_width="10dp"
         android:layout_height="fill_parent"
         android:layout_weight="0.01"
         android:orientation="vertical" >

       <View
        android:id="@+id/panel"
        android:layout_width="10dip"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:background="#ffa500"
        android:layout_marginRight="4dip"
        />
   </LinearLayout>
   <LinearLayout
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="2.86"
        android:orientation="vertical" >

         <TextView
             android:id="@+id/textViewB"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"

             android:text="" />
     </LinearLayout>
</LinearLayout>

我正在使用SimpleCursorAdapter.ViewBinder来做到这一点:

SimpleCursorAdapter.ViewBinder binder = new SimpleCursorAdapter.ViewBinder() {

@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex){    

    if (view.getId() == R.id.panel) 
    {                               
        String name = cursor.getString(1);

        if (name.equals("Ravi")) {
            view.setBackgroundColor(Color.RED);
        } else {
            view.setBackgroundColor(Color.BLUE);
        }
        return true;
    } 
    return false;
}               

listView.setAdapter(dataAdapter);
dataAdapter.setViewBinder(binder);

此代码仍无效。代码永远不会通过条件。 我可以更改TextView对象(@+id/textViewB)的字体颜色,但从未成功更改视图颜色。

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

SimpleCursorAdapter

  

一个简单的适配器,用于将列从游标映射到TextViews或   ImageViews在XML文件中定义。

我不确定你试图绑定数据库中的值View,但我认为它只适用于TextView对象(@+id/textViewB),因为{ {1}}是您可以使用此界面的TextView类型之一。

尝试使用SimpleAdapter.ViewBinder代替?否则使用View可能会给你带来好的结果。