我是android的新手。&我正在尝试创建一个4 Spinners
的数组(每个数组在列表中都有相同的动态选项 - 这是消息1到消息6),用于排序时间表。当只有1 Spinner
时,代码工作正常,但是当我创建Spinner
& ArrayAdapter
数组,然后尝试运行它,应用程序崩溃。我收到错误"不幸的是,应用程序停止了。" &安培;我的运行设备挂起,我必须重新启动它。
(我还没有实现微调器选择结果的处理)
如果有人可以帮助我,那就太棒了。
这是我的代码:
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;
}
}
答案 0 :(得分:0)
你的错误就在这里:
for(int i=1;i<=4;i++) {
addItemsOnSpinner(i);
}
问题是你有4个微调器,但你忘了在一个循环中从0开始,所以它是“0,1,2,3”所以第四个微调器将有索引3,在这里你试图工作比如“1,2,3,4”所以你的第4个微调器有索引4,但你会尝试在旋转器选项卡中获得索引4处的元素,这意味着第5个,但是你的表只有4个长度,所以你有一个“outOfBoundException”
尝试将循环更改为
for(int i=0;i<4;i++) {
addItemsOnSpinner(i);
}
希望我帮助你
答案 1 :(得分:0)
使用for (int i = 0; i < 4; i++)
然后使用"spinner" + (i+1)
我相信你的ArrayIndexOutOfBounds是因为你想要调用spinner [4],因为你的max是spinner [3]
答案 2 :(得分:0)
问题是因为您尝试在阵列中的位置4处添加对象。由于数组有4个位置,如function setMemory($limit = '512M') {
ini_set('memory_limit', $limit);
}
,因此必须使用0位置添加对象,直到3位置。