1、概述
今天在写颜色识别的Demo 时有个场景是需要用户做出单项选择,脑中蹦出首选的方案就是 ListView 配合 ChoiceMode。
但实际在编写过程中却出了问题 :ListView 中的 OnItemSelectedListener 没有从 ListView 中接收回调。出现问题并不可怕,可怕的是对问题视而不见的态度。
2、解决问题
2.1、OnItemSelectedListener的定义
OnItemSelectedListener 是当视图被选中时会触发的回调。
onItemSelected 只有当状态与前一个状态不同时,才会触发。
onNothingSelected 当视图不可见或者数据源为空时会触发该方法。
public abstract class AdapterView extends ViewGroup {
public interface OnItemSelectedListener {
void onItemSelected(AdapterView> parent, View view, int position, long id);
void onNothingSelected(AdapterView> parent);
}
}
2.2、设置 OnItemSelectedListener
通过调用setOnItemSelectedListener()方法为mOnItemSelectedListener初始化。通过查询onItemSelected()方法的调用,追踪到下面方法。
// AdapterView
private void fireOnSelected() {
if (mOnItemSelectedListener == null) {
return;
}
final int selection = getSelectedItemPosition();
if (selection >= 0) {
View v = getSelectedView();
mOnItemSelectedListener.onItemSelected(this, v, selection,
getAdapter().getItemId(selection));
} else {
mOnItemSelecte