我有两个ArrayLists:
ArrayList<String> libraries = new ArrayList<String>(2);
ArrayList<String> styles = new ArrayList<String>(2);
我有3个CheckBox组件。三个CheckBoxes应该向ArrayList添加或删除字符串,但是当选中 jqMobileChk 时会发生IndexOutOfBoundsException。
三个CheckBoxes:
jqChk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(jqChk.isChecked()){
libraries.add(0,"<script src=\"http://code.jquery.com/jquery-1.8.2.min.js\"></script>\n");
}else if(!jqChk.isChecked()){
libraries.remove(0);
}
}
});
jqMobileChk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(jqMobileChk.isChecked()){
libraries.add(1,"<script src=\"http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js\"></script>\n");
}else if(!jqMobileChk.isChecked()){
libraries.remove(1);
}
}
});
jqMobCSS.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(jqMobCSS.isChecked()){
styles.add(0,"<link rel=\"stylesheet\" href=\"http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css\" />\n");
}else if(!jqMobCSS.isChecked()){
styles.remove(0);
}
}
});
答案 0 :(得分:4)
ArrayList<String> libraries = new ArrayList<String>(2);
容量2,尺寸0
libraries.remove(1);
ofc index超出界限,因为size是0
答案 1 :(得分:4)
一些问题:
List<String> libraries = ...
代替ArrayList<String> libraries = ...
。List
创建2
作为构造函数的参数,只为两个元素创建一个包含 room 的列表。这并不意味着它包含两个元素。执行libraries.remove(1)
时,您将删除一些甚至不存在的内容。List<String>
可能更好,而不是在Map<Integer, String>
使用{<1}}:不是add(0, "...")
,而是libraries.put(0, "...");
。要删除,您可以执行libraries.remove(0)
。如果密钥不存在,您将不会获得例外。例如:
jqMobileChk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(jqMobileChk.isChecked()) {
libraryMap.put(0, "<script src=\"http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js\"></script>\n");
} else if(!jqMobileChk.isChecked()) {
libraryMap.remove(0);
}
}
});
此外,使用实际版本号可能更好,而不仅仅是0
或1
,因此1.3.0
代替0
。在这种情况下,您可能希望将地图设为Map<String, String>
并执行以下操作:
jqMobileChk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(jqMobileChk.isChecked()) {
libraryMap.put("1.3.0","<script src=\"http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js\"></script>\n");
} else if(!jqMobileChk.isChecked()) {
libraryMap.remove("1.3.0");
}
}
});
答案 2 :(得分:2)
<强>抛出:强>
IndexOutOfBoundsException - 如果索引超出范围(索引&lt; 0 || index&gt; size())
ArrayList
中没有元素,因此是例外。
您可以使用Map
代替
Map<String, String> libraries = new HashMap<String, String>();
然后
jqMobileChk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (jqMobileChk.isChecked()) {
libraries.put("jqMobileChk","<script src=\"http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js\"></script>\n");
} else if (!jqMobileChk.isChecked()) {
libraries.remove("jqMobileChk");
}
}
});
答案 3 :(得分:1)
如果ArrayList中没有索引0,则无法添加到索引1。
使用“真实”数组或SparseArray代替 - 您可以执行此操作。