为什么我的onItemSelectedListener不在ListView中调用?
我正在使用像这样设置的ListView:
<ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:longClickable="false" android:choiceMode="singleChoice"> </ListView>
在我的代码中,像这样添加一个OnItemSelectedListener到ListView:
getListView().setAdapter(adapter); getListView().setOnItemSelectedListener(this);
我的活动实现了这样的侦听器:
@Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Log.d("Tag", "ListItemSelected: Parent: " + parent.toString() + " View: " + view.toString() + " Position: " + " Id: " + id); }
我的希望是,当我点击列表中的某个东西时,我会看到这个debugging输出。 但是在LogCat中从不显示debugging输出。
OnItemSelectedListener
监听列表项select,而不是列出项目点击。
在这种情况下的select可以被看作是使用设备的触控板将重点放在这个项目上。
为了得到想要的行为,必须使用OnItemClickListener
。
这是因为你碰巧正在用手指testing触摸设备。 在触摸模式下 ,没有焦点,也没有select。 需要select的用户界面应使用不同types的小部件,如单选button。
首先,你应该设置ChoiceMode
,然后在ListView中不会接受select的事件,因为在setOnItemSelectedListener
注册了AdapterView
,在方法handleDataChanged()
注册了callback,但是类AbsListView
覆盖了这个方法,而且从来没有callbackOnItemSelectedListener
你可以通过setOnItemClickListener中的这个方法来setOnItemClickListener
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.e("TAG", "onItemClick: " + position); SparseBooleanArray positions = mListView.getCheckedItemPositions(); Log.e("TAG", "onItemSelected: " + positions.toString()); } });