在 Android 中为 Spinner 分配 ArrayAdapter 时,Array 的动态分配不起作用

Dynamic Allocation of Array doesn't work for ArrayAdapter while assigning it for Spinner in Android

在 Android 中创建 Spinner 小部件时我真的遇到了问题。目标是用我将从源动态检索的数据填充 Spinner。 现在我可以创建一个带有在程序中隐式声明的数据源的微调器。但是当我试图从动态创建的数组中获取数据时,应用程序会抛出强制关闭。 我将在这里粘贴一些演示示例来解释我的问题!

String[] SSID = new String[15];
String[] Data = {"Captain","America","Hulk","Ironman","Thor"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);




    button = (Button)findViewById(R.id.button);

    addDevDialogue = new Dialog(this);
    addDevDialogue.setContentView(R.layout.popup);

    concat();

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            dialogue();

        }
    });


}


public void concat()
{
    for(int i=0;i<5;i++)
    {
        SSID[i]=Data[i];

    }

}

public void dialogue()
{
    addDevDialogue.setTitle("Movies List");
    addDevDialogue.setCancelable(true);
    addDevDialogue.show();

    spinList2 = (Spinner)addDevDialogue.findViewById(R.id.spinner2);
    ArrayAdapter<String> listAdapter2 = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, SSID);
    spinList2.setAdapter(listAdapter2);



}

每当我尝试打开对话框时,上面的代码都会抛出错误。 我已经用预定义的数据源代替 "SSID" 尝试了同一个示例,它产生了无错误的输出!

我不明白为什么 'SSID[]' 数组在我将它定义到 ArrayAdapter 时不起作用。 任何见解都会有所帮助!!!

您在填充适配器之前调用 show() 所以调用

addDevDialogue.show();

之后

spinList2.setAdapter(listAdapter2);

更新:

一旦更改 SSID 的大小

String[] SSID = new String[Data.length];

希望对您有所帮助。

您的字符串数组 String[] Data = {"Captain","America","Hulk","Ironman","Thor"}; 声明为包含 5 个元素(索引 0-4)

在你的循环中你循环了 6 次

public void concat()
{
    for(int i=0;i<5;i++)
    {
        SSID[i]=Data[i];    
    }    
}

这可能会导致索引越界异常。将循环更改为此

public void concat()
{
    for(int i=0;i<4;i++)
    {
        SSID[i]=Data[i];

    }
}

@swarna:您正在分配一个包含 15 个元素的固定数组,然后仅填充 5 个元素。数组适配器可能与其他 10 个尚未初始化的元素一起被绊倒。建议你让你的 SSID 数组只有 5 个元素,或者如果这是一个动态确定的值,你可以保留 ArrayList 并继续添加到它。然后,在设置适配器时执行以下操作:

    YourObjList.add("one")
    YourObjList.add("two")
    YourObjList.add("three")

    String[] SSID = YourObjList.toArray(new YourObjList[YourObjList.size()]);

    ArrayAdapter<String> listAdapter2 = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, SSID);
    spinList2.setAdapter(listAdapter2);

这将允许可变列表大小。

希望对您有所帮助