【问题标题】:How to access different 'global' elements without array? (Java)如何在没有数组的情况下访问不同的“全局”元素? (爪哇)
【发布时间】:2012-07-10 01:47:30
【问题描述】:

我目前正在做 Android 开发。

R 类(一个自动生成的类)有很多“全局”值,可以从任何地方访问,如下所示:

R.drawable.<file_name_ignoring_suffix>

我有很多名为“item_0.png”、“item_1.png”、“item_2.png”等的文件。

有没有一种简单的方法可以在不先将它们放入数组的情况下遍历这些项目?

我目前的实现:

int[] itemResources = { R.drawable.item_0, R.drawable.item_1, R.drawable.item_2,
                        R.drawable.item_3, R.drawable.item_4, R.drawable.item_5  };

...然后遍历数组。

这很好用,但它不是特别易于维护,而且当我有很多项目时会很费力。

有什么想法吗?

【问题讨论】:

  • "全局元素"?对我来说,这不是一个特定的术语。
  • @Lion 我在“全球”这个词周围使用了引号,因为我使用这个词是松散的。我知道Java中没有全局变量之类的东西,但我指的是public final static声明的变量。

标签: java android


【解决方案1】:

您当然可以使用reflection 来获取R.drawable 的字段列表。这有点 hacky,但它可能对你有用。

【讨论】:

  • 这里是相关的 SO 问题:stackoverflow.com/questions/2538380/… 这就是 Keith 所说的“使用反射”。
  • 非常有趣的答案。在我们说话的时候,我正在阅读这篇文章。 @hopia这个答案也很有趣。为了使它适合我的情况,我可以操纵 f.getName() 提供的字符串来识别有问题的图像属于哪个“集合”图像(因为我有“项目”、“硬币”、“通电”等.) 谢谢你们!
【解决方案2】:

我认为,没有简单的方法可以做到这一点。这是我尝试获取可绘制对象的小代码。

    R.drawable d = new R.drawable();
    try {
        for (Field fld : declaredFields) {
            Integer id = fld.getInt(d);
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), id);
            if (bitmap != null)
                Log.d("tag", "success");
            else
                Log.d("tag", "failed");
        }
    } catch (Exception e) {
        Log.d("tag", "" + e);
    }

在上面的测试中,其中一些失败了。我不知道原因,因为它需要进一步调查。但这会让你开始。

其次,还要查找this api from theme,如果您想使用android平台根据方向、语言环境等查找合适资源的规则来选择正确的png。

【讨论】:

    【解决方案3】:

    如何将它们放在同一个目录中,然后自动查询目录内容并使用内容创建一个数组?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 2013-10-24
      相关资源
      最近更新 更多