为什么我的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()); } });