为什么我的onItemSelectedListener不是在ListView叫什么名字?
-
20-09-2019 - |
题
我使用一个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);
}
我的希望是,我会看到这个调试输出我点击列表中的东西的那一刻。但调试输出永远不会在logcat中所示。
解决方案
在 OnItemSelectedListener
侦听列表项选择和不列表项的点击。
在这种情况下的选择可以看作是与设备的触控板在此选项移动焦点。
要得到想要的行为,必须使用 OnItemClickListener
其他提示
这是因为你刚好与启用触摸的设备上你的手指来测试。在触摸模式,没有重点,没有选择。的用户界面,需要选择应使用不同类型的窗口小部件的,如单选按钮。
首先,你应该设置ChoiceMode
,然后, ListView中,不会有因为setOnItemSelectedListener
在AdapterView
临时用户接受选择的事件,并在方法handleDataChanged()
回调,但类AbsListView
覆盖此方法,永不回调OnItemSelectedListener
强>
可以通过在setOnItemClickListener
这种方法得到seletedItem
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());
}
});
不隶属于 StackOverflow