0

我有一个看起来像这样的本地 sqlite 数据库文件……</p>

_ID | Color_Name | Image_Name  
1   | Red        | red.png  
2   | Blue       | blue.png  
3   | Green      | green.png  
Etc.

数据库的 Image_Name 列仅包含文件名,而不包含图像本身。所有图像都存储在本地 res/drawable-mdpi 目录中。

目标是有一个列表,显示数据库中该颜色的颜色名称和相关图像。例如,列表看起来像这样 [下面的加号表示实际的 .png 图像]...</p>

____________________________________________

Red (text only on this line)  
+ (actual red.png image on this line)  
____________________________________________

Blue (text only on this line)  
+ (actual blue.png image on this line)  
____________________________________________

Etc.  

我可以获得要显示的颜色名称,但我不知道如何让图像本身显示。显示名称的相关代码部分如下...</p>

static class ColorHolder {
    private TextView name=null;

     ColorHolder(View row) {             
        name=(TextView)row.findViewById(R.id.colorName);

        }
           void populateFrom(Cursor c, ColortHelper r) {

               name.setText(r.getName(c)) ;
          }
}

名称和图像的 xml 文件的相关部分如下......</p>

<TextView 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|left"
android:id="@+id/colorName"/>

<ImageView
 android:id="@+id/ImageView00"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:src="@drawable/image1" <!--[NOTE: THIS DEFAULT IMAGE FILE SHOULD BE REPLACED ON THE FLY W/THE CORRECT IMAGE FILE FOR EACH RECORD]-->
  >

我发现的其他问题都没有帮助我解决这个问题。有人可以帮我解决这个问题吗?我很乐意为您提供任何帮助,但如果您可以在您的解释中使用我的实际文件名/路径/变量/ID 等(如上所示),这将特别有帮助,以便我可以最轻松地遵循和理解您的回复。指向我的教程可能没有帮助,因为我已经看过很多材料但没有解决这个问题。谢谢!

4

2 回答 2

2

使用Resources.getIdentifier(String name, String defType, String defPackage)

此外,您不需要存储资源图像名称......只需将它们命名为与颜色相同的名称(正如您已经完成的那样),只需确保正如我在这里展示的那样它们是小写的

要使用您的示例:

void populateFrom(Cursor c, ColorHelper r) {

    //get the color name from your database (only once)

    String strColor = r.getName(c);

    // set the text on your TextView as before

    TextView clrName = (TextView)findViewById(R.id.ImageView00);
    clrName.setText(strColor);

    // get the resource ID - note "name" without extension

    int resourceID = context.getResources().getIdentifier(strColor.toLower(),
            "drawable", context.getPackageName());

    //get a reference to your imageview and set the image

    ImageView clrImage = (ImageView)findViewById(R.id.ImageView00);
    clrImage.setImageResource(resourceID);

}
于 2012-08-23T02:12:13.207 回答
1

有几种方法可以做到这一点。如果我必须自己做,我会将图像保存为数据库中的 Blob。直接且易于使用。另一种选择是使用 if - else if - else if 像这样:

ImageView imageview = findViewById(R.id.ImageView00);
    if( colorname.equals("Red") )
        imageview.setImageResource(R.drawable.red);
    else if( colorname.equals("Red") )
        imageview.setImageResource(R.drawable.blue);
于 2012-08-23T01:31:32.837 回答