如何在Android中将数据库字符串切换为可绘制资源?

时间:2011-08-10 22:39:48

标签: android

我有这个代码片段,它从数据库中获取了获取的KEY_COLOR,并将其放在R.id.text_color中以便在xml中附加..

KEY_COLOR等于atm“红色”和“蓝色”。 我不想要“红色”和“蓝色”我想要图像而是一个小点。

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

    // Create an array to specify the fields we want to display in the list (only TITLE)

    String[] from = new String[]{NotesDbAdapter.KEY_TITLE, NotesDbAdapter.KEY_COLOR};

    // and an array of the fields we want to bind those fields to (in this case just text1)

    int[] to = new int[]{R.id.text1, R.id.text_color};

    // Now create a simple cursor adapter and set it to display
    SimpleCursorAdapter notes =
        new SimpleCursorAdapter(this,
                R.layout.notes_row, notesCursor, from, to);
    setListAdapter(notes);

}

我只是想将NotesDbAdapter.KEY_COLOR的结果更改为R.drawable.red_dot或blue_dot ......但我不知道如何......

你知道吗? :/

2 个答案:

答案 0 :(得分:0)

来自SimpleCursorAdapter的文档:

  

绑定分两个阶段进行。首先,如果SimpleCursorAdapter.ViewBinder可用,则调用setViewValue(android.view.View,android.database.Cursor,int)。如果返回的值为true,则发生绑定。如果返回的值为false并且要绑定的视图是TextView,则调用setViewText(TextView,String)。 如果返回的值为false并且要绑定的视图是ImageView,则调用setViewImage(ImageView,String)。

来自SimpleCursorAdapter.setViewImage (ImageView v, String value)的文档:

  

默认情况下,该值将被视为图像资源。 如果该值不能用作图像资源,则该值将用作图像Uri。

所以基本上如果你这样做,你的数据库的KEY_COLOR列包含Uri到您的图片,并替换R.id.text_color数组中的to,其资源ID为一个ImageView,理论上你的SimpleCursorAdapter会自动用ImageView填充Uri的图像。

从未尝试过,但似乎应该如何运作。

请参阅此示例,了解如何在列表行Fancy ListViews Part One中使用带有textview的图像。它是由Mark Murphy在CommonsWare上写的。它实际上使用了与我使用视图绑定器建议的方法不同的方法,并使用getView(...)方法为每行设置图像和文本。

答案 1 :(得分:0)

使用您拥有的相同fillData。

但是,在将数据库插入数据库时​​,需要使用列名为NotesDbAdapter.KEY_COLOR的数据库中的drawables的URI。

对于下面的示例代码,将图像更改为您的drawable,如果它是蓝色或红色。

String nameToInsert = "android.resource://my.package.name/"+R.drawable.image;

当然,将my.package.name更改为正确的包名。

让R.id.text_color成为imageview的id而不是textview。