开发者

Using ViewBinder for a custom ListView item with TextView

开发者 https://www.devze.com 2023-04-10 07:34 出处:网络
I\'m trying to add a background color for an TextView on my ListView using a SimpleCursorAdapter with ViewBinder, but it doesn\'t work:

I'm trying to add a background color for an TextView on my ListView using a SimpleCursorAdapter with ViewBinder, but it doesn't work:

listrow.xml:

<TextView
    android:id="@+id/catcolor"
    android:layout_width="4dp"
    android:layout_height="match_parent"
    android:layout_margin="4dp"
    android:background="#FF0099FF" />

    <LinearLayout
        android:paddingTop="4dp"
        android:paddingRight="4dp"
        android:paddingLeft="4dp"
        android:paddingBottom="2dp">

        <TextView
            android:id="@+id/title"
            android:text="{title}"
            android:textSize="@dimen/text_size_medium"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:textStyle="bold" />

    </LinearLayout>

Activity where I call the ViewBinder(class TextActivity extends ListActivity)

private void fillData() {
    Cursor notesCursor = mDbHelper.fetchAllNotes();
    startManagingCursor(notesCursor);

    String[] from = new String[]{ NoteAdapter.KEY_CATID, NoteAdapter.KEY_TITLE, NoteAdapter.KEY_CONTENT };
 开发者_开发百科   int[] to = new int[]{ R.id.catcolor, R.id.title, R.id.content };

    SimpleCursorAdapter notes = new SimpleCursorAdapter(this, R.layout.noterow, notesCursor, from, to);
    notes.setViewBinder(new ViewBinder());
    setListAdapter(notes);
}

private class ViewBinder implements SimpleCursorAdapter.ViewBinder {
    public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
        int viewId = view.getId();
        switch(viewId) {
        case R.id.catcolor:
            ImageView catcolor = (ImageView) view;

            int catColor = cursor.getInt(columnIndex);
            switch(catColor) {
            case 0:
                catcolor.setBackgroundColor(R.color.catcolor1);
            break;
            case 1:
                catcolor.setBackgroundColor(R.color.catcolor2);
            break;
            case 2:
                catcolor.setBackgroundColor(R.color.catcolor3);
            break;
            }
        break;
        }
        return false;
    }
}

What am I doing wrong?


In setViewValue(), you have to return true once you've set the value wanted for the specified view. Check out the documentation for more info. Here's what I'm thinking of for your code:

public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
    int viewId = view.getId();
    switch(viewId) {
    case R.id.catcolor:
        ImageView catcolor = (ImageView) view;

        int catColor = cursor.getInt(columnIndex);
        switch(catColor) {
        case 0:
            catcolor.setBackgroundColor(R.color.catcolor1);
            return true;
        break;
        case 1:
            catcolor.setBackgroundColor(R.color.catcolor2);
            return true;
        break;
        case 2:
            catcolor.setBackgroundColor(R.color.catcolor3);
            return true;
        break;
        }
    break;
    }
    return false;
}
0

精彩评论

暂无评论...
验证码 换一张
取 消