Android,使用SimpleCursorAdapter来设置颜色不仅仅是string

我有一个简单的游标适配器设置在我的应用程序列表中,如下所示:

private static final String fields[] = {"GenreLabel", "Colour", BaseColumns._ID}; datasource = new SimpleCursorAdapter(this, R.layout.row, data, fields, new int[]{R.id.genreBox, R.id.colourBox}); 

R.layout.row由两个TextView(genreBox和colourBox)组成。 而不是将TextView的内容设置为“Color”的值,我想将其背景颜色设置为该值。

我需要做什么才能做到这一点?

  • Android:使用SimpleCursorAdapter从数据库获取数据到ListView
  • 如何在Android for Android api 11+的列表视图中显示联系人
  • 将ArrayAdapter转换为CursorAdapter以在SearchView中使用
  • 如何从managedQuery转换到LoaderManager / CursorLoader?
  • Android ListView刷新
  • Android:使用SimpleCursorAdapter将数据从数据库获取到ListView
  • Android:自定义SimpleCursorAdapter中的newView和bindView问题
  • 使用Cursor Adapter实现带多个select器的listview
  • 看看SimpleCursorAdapter.ViewBinder 。

    setViewValue基本上是你随意使用Cursor的数据完成任何事情的机会,包括设置视图的背景颜色。

    例如,像这样的东西:

     SimpleCursorAdapter.ViewBinder binder = new SimpleCursorAdapter.ViewBinder() { @Override public boolean setViewValue(View view, Cursor cursor, int columnIndex) { String name = cursor.getColumnName(columnIndex); if ("Colour".equals(name)) { int color = cursor.getInt(columnIndex); view.setBackgroundColor(color); return true; } return false; } } datasource.setViewBinder(binder); 

    更新 – 如果您使用自定义适配器(扩展CursorAdaptor ),那么代码不会改变很多。 你会重写getViewbindView

     @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView != null) { return convertView; } /* context is the outer activity or a context saved in the constructor */ return LayoutInflater.from(context).inflate(R.id.my_row); } @Override public void bindView(View view, Context context, Cursor cursor) { int color = cursor.getInt(cursor.getColumnIndex("Colour")); view.setBackgroundColor(color); String label = cursor.getString(cursor.getColumnIndex("GenreLabel")); TextView text = (TextView) findViewById(R.id.genre_label); text.setText(label); } 

    你正在做更多的手动,但它或多或less都是一样的想法。 请注意,在所有这些示例中,您都可以通过caching列索引来保存性能,而不是通过string查找它们。

    你在找什么需要一个自定义的游标适配器。 您可以inheritanceSimpleCursorAdapter 。 这基本上允许访问创build的视图(尽pipe您将自己创build它)。

    有关完整示例,请参阅自定义CursorAdapters上的这篇博客文章 。 特别是,我认为你需要重写bindView