【问题标题】:Android: How to create Array of ArrayAdapters for Array of SpinnersAndroid:如何为 Spinner 数组创建 ArrayAdapters 数组
【发布时间】:2013-11-30 04:34:14
【问题描述】:

Android 4.0+ 我有 10 个微调器,已加载到数组中 我正在尝试使用 ArrayAdapters 数组与 10 个 ArrayAdapters 关联。 不工作...

ArrayAdapter<CharSequence>[] adpPPI;

for (int ppiCntr = 0; ppiCntr < 10; ppiCntr++) {

//NOTE 1: next statement gets resource id, works ok
    int res_array = getResources().getIdentifier(
        "com.my:array/ppi" + Integer.toString(ppiCntr + 1) + "_array", null, null);

// NOTE 2: creating the array adapter provides null pointer error. 
// because I need to initialize it somehow? how? 
    adpPPI[ppiCntr] = ArrayAdapter.createFromResource(
        getApplicationContext(), res_array, R.layout.psm_simple_spinner_item);
}

【问题讨论】:

    标签: android arrays spinner android-arrayadapter


    【解决方案1】:

    那是因为你从不初始化adpPPI

    在数组声明之间...

    ArrayAdapter<CharSequence>[] adpPPI;
    

    ...并尝试为其索引分配值...

    adpPPI[ppiCntr] = ArrayAdapter.createFromResource(...);
    

    ...你永远不会创建数组。

    简而言之,您可能希望在两者之间添加类似这样的内容:

    adpPPI = new ArrayAdapter[10];
    

    提示:确保在 for 循环上方的某处执行此操作。

    注意:您不能在 Java 中创建泛型类型的数组,因此您必须使用原始类型(或者更好地说:使数组的初始化无类型)。或者,您可以使用集合/列表代替数组。

    【讨论】:

    • 我试过了:adpPPI = new ArrayAdapter[10];在 for 循环之前,但在 Eclipse 中出现错误:“无法创建 ArrayAdapter 的通用数组”
    • 您可能希望将ppiCntr 替换为实际数字,以防在for 循环之前变量没有合理的值。更新了答案以说明这一点。
    • 啊,是的,我真傻。 Java 不做泛型类型的数组。相反,您将不得不使用“原始”类型。 Eclipse 会警告你,但如果你知道你在做什么,你应该没问题。我会再次更新答案。或者,使用集合/列表代替数组。
    【解决方案2】:
    List<ArrayAdapter<CharSequence>> adpPPI = new Vector<ArrayAdapter<CharSequence>>();
    
    for (int ppiCntr = 0; ppiCntr < 10; ppiCntr++) {
    
    //NOTE 1: next statement gets resource id, works ok
        int res_array = getResources().getIdentifier(
            "com.my:array/ppi" + Integer.toString(ppiCntr + 1) + "_array", null, null);
    
    // NOTE 2: creating the array adapter provides null pointer error. 
    // because I need to initialize it somehow? how? 
        adpPPI.add(ArrayAdapter.createFromResource(
            getApplicationContext(), res_array, R.layout.psm_simple_spinner_item));
    }
    

    试试上面的代码,你错过了初始化你的数组。

    【讨论】:

    • 在 Eclipse 中得到错误:Eclipse: "Cannot create a generic array of ArrayAdapter"
    • 非常感谢!我决定暂时坚持使用“原始”类型的阵列适配器。但我理解您的建议,也很高兴看到这种优雅的方法。
    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2014-08-23
    • 2022-01-16
    相关资源
    最近更新 更多