android 上的旋转器阵列
array of spinners on android
我是 android.. 的新手,我正在尝试创建一个包含 4 个 Spinners
的数组(每个数组在列表中都有相同的动态选项 - 即 message1 到 message6 ) 的各种时间表。当只有 1 个 Spinner
时,代码工作正常,但是当我创建 Spinner
和 ArrayAdapter
数组然后尝试 运行 时,应用程序崩溃了。我收到错误 "Unfortunately, app has stopped." 并且我的 运行ning 设备挂起,我必须重新启动它。
(我还没有实现微调器选择结果的处理)
如果有人可以在这里帮助我,那就太好了。
这是我的代码:
public class Activity3 extends Activity {
private Button done;
private Spinner spinner[]= new Spinner[4];
private ArrayAdapter dataAdapter[]= new ArrayAdapter[4];
String message1,message2,message3,message4,message5,message6;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity3);
Intent intent = getIntent();
message1 = intent.getStringExtra(Activity2.EXTRA_MESSAGE1);
message2 = intent.getStringExtra(Activity2.EXTRA_MESSAGE2);
message3 = intent.getStringExtra(Activity2.EXTRA_MESSAGE3);
message4 = intent.getStringExtra(Activity2.EXTRA_MESSAGE4);
message5 = intent.getStringExtra(Activity2.EXTRA_MESSAGE5);
message6 = intent.getStringExtra(Activity2.EXTRA_MESSAGE6);
for(int i=1;i<=4;i++) {
addItemsOnSpinner(i);
}
}
public void addItemsOnSpinner(int i) {
String spinner_id="spinner"+i;
int resID = getResources().getIdentifier(spinner_id, "id", "com.sample.pat1");
spinner[i] = ((Spinner) findViewById(resID));
List<String> subject_list = new ArrayList<String>();
subject_list.add(message1);
subject_list.add(message2);
subject_list.add(message3);
subject_list.add(message4);
subject_list.add(message5);
subject_list.add(message6);
dataAdapter[i] = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, subject_list);
dataAdapter[i].setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner[i].setAdapter(dataAdapter[i]);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_activity3, menu);
return true;
}
}
你的错误就在这里:
for(int i=1;i<=4;i++) {
addItemsOnSpinner(i);
}
问题是你有 4 个微调器,但你忘记了在一个循环中你从 0 开始,所以它是“0,1,2,3”所以第 4 个微调器的索引为 3,这里你正在尝试像“1,2,3,4”一样工作,所以你的第 4 个微调器有索引 4,但你会尝试在微调器选项卡中获取索引 4 处的元素,这意味着第 5 个,但是你的 table 是只有 4 个长度,所以你有一个 "outOfBoundException"
尝试将循环更改为
for(int i=0;i<4;i++) {
addItemsOnSpinner(i);
}
希望对你有所帮助
使用for (int i = 0; i < 4; i++)
然后使用 "spinner" + (i+1)
我相信你的 ArrayIndexOutOfBounds 导致了因为你想调用 spinner[4],它超出了范围,因为你的最大值是 spinner[3]
问题是因为您试图在数组中的位置 4 添加一个对象。由于数组有 4 个位置,如 private Spinner spinner[]= new Spinner[4];
,您必须使用 0 位置添加对象直到 3 位置。
我是 android.. 的新手,我正在尝试创建一个包含 4 个 Spinners
的数组(每个数组在列表中都有相同的动态选项 - 即 message1 到 message6 ) 的各种时间表。当只有 1 个 Spinner
时,代码工作正常,但是当我创建 Spinner
和 ArrayAdapter
数组然后尝试 运行 时,应用程序崩溃了。我收到错误 "Unfortunately, app has stopped." 并且我的 运行ning 设备挂起,我必须重新启动它。
(我还没有实现微调器选择结果的处理)
如果有人可以在这里帮助我,那就太好了。
这是我的代码:
public class Activity3 extends Activity {
private Button done;
private Spinner spinner[]= new Spinner[4];
private ArrayAdapter dataAdapter[]= new ArrayAdapter[4];
String message1,message2,message3,message4,message5,message6;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity3);
Intent intent = getIntent();
message1 = intent.getStringExtra(Activity2.EXTRA_MESSAGE1);
message2 = intent.getStringExtra(Activity2.EXTRA_MESSAGE2);
message3 = intent.getStringExtra(Activity2.EXTRA_MESSAGE3);
message4 = intent.getStringExtra(Activity2.EXTRA_MESSAGE4);
message5 = intent.getStringExtra(Activity2.EXTRA_MESSAGE5);
message6 = intent.getStringExtra(Activity2.EXTRA_MESSAGE6);
for(int i=1;i<=4;i++) {
addItemsOnSpinner(i);
}
}
public void addItemsOnSpinner(int i) {
String spinner_id="spinner"+i;
int resID = getResources().getIdentifier(spinner_id, "id", "com.sample.pat1");
spinner[i] = ((Spinner) findViewById(resID));
List<String> subject_list = new ArrayList<String>();
subject_list.add(message1);
subject_list.add(message2);
subject_list.add(message3);
subject_list.add(message4);
subject_list.add(message5);
subject_list.add(message6);
dataAdapter[i] = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, subject_list);
dataAdapter[i].setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner[i].setAdapter(dataAdapter[i]);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_activity3, menu);
return true;
}
}
你的错误就在这里:
for(int i=1;i<=4;i++) {
addItemsOnSpinner(i);
}
问题是你有 4 个微调器,但你忘记了在一个循环中你从 0 开始,所以它是“0,1,2,3”所以第 4 个微调器的索引为 3,这里你正在尝试像“1,2,3,4”一样工作,所以你的第 4 个微调器有索引 4,但你会尝试在微调器选项卡中获取索引 4 处的元素,这意味着第 5 个,但是你的 table 是只有 4 个长度,所以你有一个 "outOfBoundException"
尝试将循环更改为
for(int i=0;i<4;i++) {
addItemsOnSpinner(i);
}
希望对你有所帮助
使用for (int i = 0; i < 4; i++)
然后使用 "spinner" + (i+1)
我相信你的 ArrayIndexOutOfBounds 导致了因为你想调用 spinner[4],它超出了范围,因为你的最大值是 spinner[3]
问题是因为您试图在数组中的位置 4 添加一个对象。由于数组有 4 个位置,如 private Spinner spinner[]= new Spinner[4];
,您必须使用 0 位置添加对象直到 3 位置。