使用index指定可绘制值

时间:2013-09-30 00:08:16

标签: java android

我的XML文件中有一堆ImageViews

他们的ID是:

ivIcon0
ivIcon1
ivIcon2
ivIcon3

如果我的int k;值为1,我只想显示ivIcon1,如果int k值为0,我想显示'ivIcon0`

我尝试了以下内容:

int iconResource = R.id.ivIcon(k);

这给了我一个错误。我确信这很简单,但似乎无法弄明白。我想将与background匹配的ID iconResource设置为R.drawable.iconpressed

我有一个小部件,其中包含以下行:

RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.widgetlayout);

然后我可以使用以下行来设置图像源:

views.setImageViewResource("THE ID FROM THE INDEX", "THE DRAWABLE");

但上述两行在Activity

中不起作用

2 个答案:

答案 0 :(得分:1)

创建一个int数组:

int[] resources = { R.id.ivIcon0, R.id.ivIcon1, R.id.ivIcon2, R.id.ivIcon3 };

然后使用int iconResource = resources[k];

访问ID

从字符串中获取id(如果您在活动中执行此操作,请将“context”替换为“this”

int iconResource = context.getResources().getIdentifier("ivIcon" + k, "id", context.getPackageName());

然后获取您的观点:ImageView view = (ImageView) findViewById(iconResource)

就个人而言,只要可能的id数量不是太大,我更喜欢使用int-array方法。当使用get-id-from-String方法时,如果找不到,则最终会得到id 0,而如果找不到,则int-array中的值将产生编译器错误。

答案 1 :(得分:0)

我的解决方案适用于其他人将来需要它的情况:

if(Arrays.asList(myarraylist).contains(df.format(Calendar.getInstance(Locale.US).getTime()))) {
        int index = Arrays.asList(suspendedDates).indexOf(df.format(Calendar.getInstance(Locale.US).getTime()));

        int k = MainActivity.this.getResources().getIdentifier("ivIcon" + index, "id", MainActivity.this.getPackageName());

        ImageView view = (ImageView) findViewById(k);

        view.setImageResource(R.drawable.caliconpressed);
    }