最近学习android,在书上看到一个实例,当listView上没有东西被选中的时候,getCheckedItemPositions() .size()得到的值确不是0,以下是代码 Platform 2.2
private void showMulti(){ AlertDialog ad = new AlertDialog.Builder(this).setTitle("选择省份"). setMultiChoiceItems(provinces, defualShow, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { } }).setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String s = "你选择了:"; for(int i =0; i<provinces.length;i++){ if(lv.getCheckedItemPositions().get(i)){ s += i+":"+lv.getAdapter().getItem(i)+","; Log.d("info", i+" is checked"); } } if(lv.getCheckedItemPositions().size()>0){ Log.d("info", lv.getCheckedItemPositions().size()); new AlertDialog.Builder(Main.this).setMessage(s).show(); }else{ new AlertDialog.Builder(Main.this).setMessage("什么也没选").show(); } } }).setNegativeButton("取消", null) .create(); lv = ad.getListView(); ad.show(); }
点击Show Mutil后,如果先选择几个,再将其全部取消
得到的结果确是
而不是预期结果
由此推测出lv.getCheckedItemPositions().size()>0,但在lv.getCheckedItemPositions().get(i)进行判断的时候确实没得到被
选中的item, 这里纳闷了,看其doc说明
public SparseBooleanArray getCheckedItemPositions ()
Since:
API Level 1
Returns the set of checked items in the list.
应该是得到选中的列表,事实上得到的size确不是0,而是2,虽然可以通过其它方法来解决这个bug,但这里道底是程序的逻辑问题,还是我对API的理解错误,有点纠结