【问题标题】:Android Java: R.id.variable1..variable2..variable3..etcAndroid Java:R.id.variable1..variable2..variable3..etc
【发布时间】:2012-03-15 16:56:23
【问题描述】:

我正在尝试为 Android 学习 Java,但不知道如何在 Google 上搜索它。我想知道是否有办法以可编程的方式将数字附加到 R.id.variable 或 R.drawable.variable 等的末尾?

基本上,我有几个标记为 image1、image2、image3 等的图像。我想将 ImageView 可绘制对象更新为基于另一个变量。因此,如果传递的变量是“1”,它会将视图更新为“image1”。如果是“2”,它将更新“image2”等等,但我不知道是否有办法在调用更新时将“1”附加到“R.drawable.image”。

最好的方法是如何做到这一点?

【问题讨论】:

标签: java android variables r.java-file


【解决方案1】:

也许有帮助:

您的图片:image1.png, image2.png, ...., imageN.png

你可以找到他们的id:

getResources().getIdentifier("IMAGE_NAME", "drawable", context.getPackageName())

所以:

 int idImage1 = getResources().getIdentifier("image1", "drawable", context.getPackageName())
 int idImage2 = getResources().getIdentifier("image2", "drawable", context.getPackageName())
  .....
 int idImageN = getResources().getIdentifier("imageN", "drawable", context.getPackageName())

【讨论】:

  • 还值得澄清第一个参数可以动态构建,即/getResources().getIdentifier("image" + label, "drawable", etc.) 其中label 是一个参数
  • 显然我今天打字不够快 :)
  • 完美。这就是我一直在寻找的。谢谢。
【解决方案2】:

你所说的叫Reflection。它可能会有点混乱,因此对于您所描述的情况,最好将图像放在数组或列表中,并使用参数作为索引来检索它们。

【讨论】:

    【解决方案3】:

    使用数组!您当然可以使用您想要的任何数据结构,您可能会发现 List(特别是 ArrayList)允许您使用更多的 Collections API。或者,如果您想通过名称引用您的图像,您可以使用地图。

    Image[] myImages = new Image[n];
    //populate images e.g. myImages[0] = new Image();
    
    void updateImage(int imageNo) {
        Image i = myImages[imageNp]; //arrays start at 0 not 1
        //do stuff to i
    }
    

    【讨论】:

      【解决方案4】:

      要通过动态名称获取资源,请使用getIdentifier()。该函数接受一个字符串并按该名称返回资源的 ID

      这是我的代码中的一个示例,我在其中获取名称为“run_arbitrary-integer_summary”的字符串资源的资源 ID:

      getResources().getIdentifier(
                  String.format("run_%d_summary", mSelectedRun),
                  "string", 
                  getPackageName()
                  );
      

      可能有更好的方法来做你正在做的事情,但我会让更熟悉 Android 的人进入那个...

      【讨论】:

        猜你喜欢
        • 2017-08-05
        • 2011-07-19
        • 2014-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多