在 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);
这将允许可变列表大小。
希望对您有所帮助
在 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);
这将允许可变列表大小。
希望对您有所帮助