0

我正在使用带有基本适配器的列表视图。

  • 每行有 1 个图像视图 + 1 个文本视图。
  • 我希望能够用代码而不是 xml 动态填充每一行的图像
  • 我的图像位于我的可绘制文件夹中。
  • 每个图像都有一个名称:i1、i2、...、i1000。
  • 当我填充我的列表时,我希望能够将 i1 设置为第 1 行,将 i2 设置为第 2 行,将 i3 设置为第 3 行等。

每行的 XML 代码是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/containerView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<ImageView 
    android:id="@+id/imgView"
    android:layout_height="50dip"
    android:layout_width="50dip">        
</ImageView>

<TextView 
    android:id="@+id/descView"
    android:layout_toRightOf="@+id/imgView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
</TextView>
</RelativeLayout>

我正在使用适配器来填充每一行中的相关数据。让我们以填充文本为例,效果很好:

TextView tv = (TextView)ll.findViewById(R.id.descView);
tv.setText(<some dynamic data with whatever parameters and conditions>);

但是当我想做同样的事情来动态填充图像时,我被卡住了:

ImageView iv = (ImageView)ll.findViewById(R.id.imgView);           
iv.setBackgroundResource(R.drawable.<problem is here since it has to be a static name of a file, not dynamic>)

当然我可以使用这样的大开关

switch (<some dynamic parameter>) {
case 1: iv.setBackgroundResource(R.drawable.i1); break;
case 2: iv.setBackgroundResource(R.drawable.i2); break;
case 3: iv.setBackgroundResource(R.drawable.i3); break;

但这看起来是一个可怕的选择,尤其是对于包含数千张图像的长列表。

那么,在这种情况下,如何在不依赖 if else 的漫长而痛苦的块或巨大的开关的情况下动态设置图像呢?

我希望这很清楚,如果没有,请告诉我,我会尽力澄清

谢谢

4

2 回答 2

2

尝试这个

for(int i=1;i<=100;i++)
{
int drawableid= this.getResources().getIdentifier("i"+i, "drawable", this.getPackageName());
iv.setBackgroundResource(drawableid);

}
于 2013-05-16T15:55:44.773 回答
0

Context getResources().getIdentifier("i1", "drawable", "your.package.name");

于 2013-05-16T15:55:12.120 回答