我刚开始使用Adapters,我尝试制作一个简单的应用程序,显示一个可检查的字符串列表和一个按钮。单击该按钮后,它将在TextView小部件中显示下面的所有已检查项目。
public class Checklist extends ListActivity {
private String[] items={"Hi","My","Name","is","Adrian"};
ListView lv;
Button btn;
TextView tv;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_checklist);
lv = (ListView) findViewById(android.R.id.list);
btn = (Button) findViewById(R.id.button1);
tv = (TextView) findViewById(R.id.textView);
final ArrayAdapter<String> ad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, items);
lv.setAdapter(ad);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
long[] ids = lv.getCheckedItemIds();
String s = "";
for (int i=0; i<ids.length;i++) {
s=s+ids[i]+"\n";
}
tv.setText(s);
}
});
}
}
我已经提出了这个代码但是不想工作,因为这个数组
long[] ids = lv.getCheckedItemIds();
实际上并没有获得任何值。所以我查看了API,它说适配器
final ArrayAdapter<String> ad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, items);
必须具有稳定的ID。然后我也检查了它,并且适配器没有稳定的ID
hasStableIDs() == false
我该如何解决这个问题?
由于
答案 0 :(得分:0)
你需要做的是,而不是像使用long[] ids
一样使用数组,你必须创建一个SparseBooleanArray对象,就像这样SparseBooleanArray sparseBooleanArray = your_list.getCheckedItemPositions();