我有一个简单的Android程序,只有一个按钮和一个textview。单击该按钮时,会在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());
}
});
}
}
答案 0 :(得分:0)
只有当arraylist.size()大于你试图为其设置值的位置时,才能使用ArrayList.set()。
http://docs.oracle.com/javase/6/docs/api/java/util/List.html#set(int, E)
答案 1 :(得分:0)
已编辑 - 您添加了int i。第一段不再适用。
问题是ArrayLists是动态增长的,但你需要告诉它们有多大,或者告诉它们增长。如果ArrayList当前有5个元素,并且您尝试将项目设置为位置10,则应该获得IndexOutOfBoundsException。
您是否有理由不想使用add()方法? 如果你想继续使用set(),你还应该使用ensureCapacity()或size()来确保ArrayList足够大。
这两种方法都记录在http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html