📅  最后修改于: 2023-12-03 15:17:24.664000             🧑  作者: Mango
在Android开发中,经常需要使用ListView控件来展示列表数据。而有时候我们需要获取用户选中的项,以便进行后续操作。下面介绍几种获取ListView选中项的方法。
ListView提供了一个OnItemClickListener接口,可以监听列表项的点击事件。我们可以在监听器中获取用户选中的项。
ListView listView = findViewById(R.id.list_view);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// position表示用户选中的项的索引
// do something
}
});
如果ListView支持多选,我们可以使用SparseBooleanArray来获取选中项的列表。
ListView listView = findViewById(R.id.list_view);
final SparseBooleanArray checkedItems = listView.getCheckedItemPositions();
for (int i = 0; i < checkedItems.size(); i++) {
if (checkedItems.valueAt(i)) {
// 获取选中项的索引
int position = checkedItems.keyAt(i);
// do something
}
}
如果ListView的每个项是具有数据对象的JavaBean,我们可以使用getItemAtPosition和getItemIdAtPosition方法来获取选中项的数据对象。
ListView listView = findViewById(R.id.list_view);
MyAdapter adapter = new MyAdapter(getContext(), dataList);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 获取选中项的数据对象
Object item = parent.getItemAtPosition(position);
// do something
}
});
注意:如果不设置Id,则getItemIdAtPosition返回值是ListView.INVALID_ROW_ID。
以上介绍了三种常见情况下获取ListView选中项的方法。其中基本方法OnItemClickListener适用于大部分情况,而SparseBooleanArray在支持多选时非常实用,getItemAtPosition和getItemIdAtPosition则适用于每个项都有数据对象的情况。