0

我有一个带有一个按钮和一个文本视图的简单 Android 程序。单击按钮时,将在 ArrayList 中插入一个数字。但是,它不起作用。如果更改为添加,它可以正常工作。

package test_ad.com;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class Test_adActivity extends Activity {
    ArrayList<Integer> al = new ArrayList<Integer>();
    Button myB;
    int i=0;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    myB = (Button) findViewById(R.id.button1);
    myTV = (TextView) findViewById(R.id.textView1);
    myB.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
            al.set(i,10*i);//insert an Integer at index i, but not working
            i++;
            if (i == 5)
                myTV.setText(al.toString());
        }
    });
}

}

4

2 回答 2

0

ArrayList.set() 仅在 arraylist.size() 大于您尝试为其设置值的位置时才起作用。

http://docs.oracle.com/javase/6/docs/api/java/util/List.html#set(int, E)

于 2012-06-19T21:11:50.137 回答
0

已编辑-您添加了 int i。第一段不再适用。

问题是 ArrayList 动态增长,但您需要告诉它们有多大,或者告诉它们增长。如果 ArrayList 当前有 5 个元素并且您尝试将项目设置在位置 10,您应该得到一个 IndexOutOfBoundsException。

您是否有不想使用 add() 方法的原因?如果你想继续使用 set(),你还应该使用 ensureCapacity() 或 size() 来确保 ArrayList 足够大。

这两种方法都记录在http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html

于 2012-06-19T21:14:26.350 回答