2013-02-10 91 views
1

我有一个列表视图,并希望根据从SQLite数据库检索到的某些条件更改视图(@+id/panel)颜色。使用SimpleCursorAdapter.ViewBinder更改视图的颜色

<?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)的字体颜色,但从未成功更改“查看”颜色。

感谢您的回答。

+0

是否只有一行,你想与其他颜色不同?还是几行?如果只有一行,我可能会有所帮助。 – 2013-02-10 21:57:53

+0

几行取决于条件。但我希望看到你的解决方案也行 – neonerdy 2013-02-10 23:00:26

+0

为什么不扩展SimpleCursorAdapter并重写getView。 – 2013-02-10 23:45:37

回答

0

SimpleCursorAdapter

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

我不知道什么View你正试图将值从数据库绑定,但我认为它仅适用于该TextView对象(@+id/textViewB)因为TextViewView类型之一,你可以使用此接口。

请尝试使用SimpleAdapter.ViewBinder来代替?否则使用getView()可能会给你很好的结果。