2011-04-22 24 views
1

我有一个使用SimpleCursorAdapter从SQLite数据库填充的列表视图。其中一个在游标中返回的列是一个整数值0或1.在我的列表视图中,我想以更友好的形式(即“Yes”或“No”)显示它,并可能使用不同的文本颜色为每个。下面是我的源:Android应用程序,ListView中的条件文本

Cursor c = dbHelper.fetchAllItems(); 
startManagingCursor(c); 

String[] from = {"deployed", "designation", "serial"}; 
int[] to = {R.id.deployed, R.id.designation, R.id.serial}; 

setListAdapter(new SimpleCursorAdapter(this, R.layout.list_item, c, from, to)); 

我将如何有条件开关元件和/或属性的布局时,SimpleCursorAdapter每个视图的列名映射简单。 (它是安全的假设,我不能使用SimpleCursorAdapter做到这一点?)

+1

可能不应该使用simplecursoradapter。像这样使用simplecursoradapter并不意味着需要进行很多定制 – binnyb 2011-04-22 19:16:52

回答

3

通过添加自定义适配器,扩展的CursorAdapter

解决

修改:

Cursor c = dbHelper.fetchAllItems(); 
startManagingCursor(c); 

setListAdapter(new RowAdapter(this, c)); 

新嵌套类:

private static class RowAdapter extends CursorAdapter { 

    public RowAdapter(Context context, Cursor c) { 
     super(context, c); 
    } 

    public void bindView(View view, Context context, Cursor c) { 
     TextView vDesignation = (TextView) view.findViewById(R.id.designation); 
     TextView vSerial = (TextView) view.findViewById(R.id.serial); 
     TextView vDeployed = (TextView) view.findViewById(R.id.deployed); 

     String designation = c.getString(c.getColumnIndexOrThrow("designation")); 
     String serial = c.getString(c.getColumnIndexOrThrow("serial")); 
     int deployed = c.getInt(c.getColumnIndexOrThrow("deployed")); 

     vDesignation.setText(designation); 
     vSerial.setText(serial); 
     vDeployed.setText(deployed > 0 ? R.string.yes : R.string.no); 
     vDeployed.setTextColor(deployed > 0 ? view.getResources().getColor(R.color.yes) : view.getResources().getColor(R.color.no)); 
    } 

    public View newView(Context context, Cursor c, ViewGroup parent) { 
     LayoutInflater inflater = LayoutInflater.from(context); 
     View view = inflater.inflate(R.layout.list_item, parent, false); 
     bindView(view, context, c); 
     return view; 
    } 
} 
相关问题