Why is my onItemSelectedListener not called in a ListView?

别说谁变了你拦得住时间么 提交于 2019-12-18 01:19:12

问题


I'm using a ListView that is setup like this:

<ListView android:id="@android:id/list" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:longClickable="false"
    android:choiceMode="singleChoice">
</ListView>

In my code I add an OnItemSelectedListener to the ListView like this:

getListView().setAdapter(adapter);
getListView().setOnItemSelectedListener(this);

my Activity implements the listener like that:

@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);
}

My hope was, that I would see this debug output the moment I click on something in the list. But the debug output is never shown in LogCat.


回答1:


The OnItemSelectedListener listens for list item selections and not list item clicks.

A selection in this case could be seen as moving the focus on this item with the device's trackpad.

To get the wanted behavior one must use the OnItemClickListener.




回答2:


It's because you happen to be testing with your fingers on a touch-enabled device. In touch mode, there is no focus and no selection. UIs that need selection should use a different type of widget, such as radio buttons.




回答3:


At first,you should set ChoiceMode,and then,in ListView,there will not accept the selected event because setOnItemSelectedListener registed in AdapterView,and callback in method handleDataChanged(),but class AbsListView override this method and never callback OnItemSelectedListener

you can get the seletedItem by this method in 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());

        }
    });


来源:https://stackoverflow.com/questions/2454337/why-is-my-onitemselectedlistener-not-called-in-a-listview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!