如何使用SimpleCursorAdapter从数据库中加粗特定元素

时间:2010-07-02 18:47:25

标签: android

我有一个主要活动,它从数据库中获取元素并在可点击的列表视图中显示它们。我使用这种方法来完成任务:

private void fillData() {
    // Get all of the notes from the database and create the item list
    Cursor c = RequestManager.getRequests(getApplicationContext());
    startManagingCursor(c);
    String[] from = new String[] { DataBase.KEY_TITLE, DataBase.KEY_BODY };
    int[] to = new int[] { R.id.text1, R.id.text2 };

    // Now create an array adapter and set it to display using our row
    SimpleCursorAdapter notes =
        new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);
    setListAdapter(notes);
}

我想知道,是否有可能访问数据库中的布尔字段,并且特定元素的粗体是字段被标记为未读?每个元素都在文本视图中,然后放在列表视图中。 感谢

编辑:使用建议来扩展CursorAdapter类,但是当列表中的任何元素以粗体显示时,第一个元素也会以粗体显示。一旦所有元素都被标记为已读,则第一个元素将返回unbolded。有什么想法吗?

    public void bindView(View view, Context context, Cursor cursor) {
    TextView textRequestNo = (TextView) view.findViewById(R.id.text1);
    TextView textMessage = (TextView) view.findViewById(R.id.text2);
    StringBuilder requestNo = new StringBuilder(cursor.getString(cursor
            .getColumnIndex("requestNo")));
    StringBuilder message = new StringBuilder(cursor.getString(cursor
            .getColumnIndex("Message")));

    textRequestNo.setText(requestNo);
    textMessage.setText(message);
    if (cursor.getString(cursor.getColumnIndex("Read")).equals("false"))
    {
        textRequestNo.setTypeface(null, Typeface.BOLD);
        textMessage.setTypeface(null, Typeface.BOLD);
    }   
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    final View view = mInflater.inflate(R.layout.notes_row, parent, false);
    bindView(view, context, cursor);
    return view;
}

1 个答案:

答案 0 :(得分:2)

不幸的是,我认为您必须实现自己的CursorAdapter才能实现此功能。但事情并不那么糟糕;您可以创建ResourceCursorAdapter的子类,然后您需要做的就是编写自己的bindView()实现。在此实现中,您可以读取Cursor以确定是否应该粗体化该行。