4

我在 xml 中声明了几个整数值,并且需要使用 Class 中的值来定义对象的数组大小。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--     Default Object Count -->
    <item format="integer" name="item1" type="integer">3</item>
    <item format="integer" name="item2" type="integer">1</item>
    <item format="integer" name="item3" type="integer">1</item>
</resources>

我在课堂上使用上述值如下

public class InitialiseObjects {
    // For now static number of objects initialized
    private String TAG = "INIT_OBJECTS";
    int ITEM1_COUNT = R.integer.item1;
    int ITEM2_COUNT = R.integer.item2;
    int ITEM3_COUNT = R.integer.item3;

    private Item1[] item1Objs = new Item1[ITEM1_COUNT];
    private Item2[] item2Objs = new Item2[ITEM2_COUNT];
    private Item3[] item3Objs = new Item3[ITEM3_COUNT];
}

我希望项目 1、2、3 的 ITEM*_COUNT 分别为 3、1、1。但是我分别得到 2131034112、2131034113、2131034114

这里有什么问题?

正在使用 Android 2.2 [API-8]

4

3 回答 3

13

R.integer.item1是资源的 ID,因此是一个非常大且任意的整数。

您寻找的价值是 getContext().getResources().getInteger(R.integer.item1);

因此,您将无法在静态代码中获取它们。

您应该在代码中使用延迟初始化:

private Item1[] item1Objs;
public Item1[] getItem1Array(Context context) {
  if (item1Objs == null) {
     int count = context.getResources().getInteger(R.integer.item1);
     item1Objs = new Item1[count];
     }
  return item1Objs;
}
于 2012-11-18T14:17:43.883 回答
2

这样做:

Resources res = getResources();
int maxSpeed = res.getInteger(R.integer.max_speed);

见这里:http: //developer.android.com/guide/topics/resources/more-resources.html#Integer

于 2012-11-18T14:14:07.573 回答
1

原因是任何 R.integer.* 都是生成的整数值,它就像一个与您在 xml 中声明的值相关的 id

你宁愿打电话

getResources().getInteger(R.integer.*);
于 2012-11-18T14:19:12.480 回答