android 上的旋转器阵列

array of spinners on android

我是 android.. 的新手,我正在尝试创建一个包含 4 个 Spinners 的数组(每个数组在列表中都有相同的动态选项 - 即 message1 到 message6 ) 的各种时间表。当只有 1 个 Spinner 时,代码工作正常,但是当我创建 SpinnerArrayAdapter 数组然后尝试 运行 时,应用程序崩溃了。我收到错误 "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 位置。