我在使用我创建的ListView时遇到问题:我想在点击它时选择一个项目。
我的代码如下:
protected void onResume() {
...
ListView lv = getListView();
lv.setOnItemSelectedListener(new OnItemSelectedListener()
{
public void onItemSelected(AdapterView<?> adapterView, View view, int pos, long id) {
Log.v(TAG, "onItemSelected(..., " + pos + ",...) => selected: " + getSelectedItemPosition());
}
public void onNothingSelected(AdapterView<?> adapterView) {
Log.v(TAG, "onNothingSelected(...) => selected: " + getSelectedItemPosition());
}
});
lv.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
lv.setSelection(pos);
Log.v(TAG, "onItemClick(..., " + pos + ",...) => selected: " + getSelectedItemPosition());
}
});
...
}
当我运行此功能并点击例如在第二项(即pos = 1)我得到:
04-03 23:08:36.994: V/DisplayLists(663): onItemClick(..., 1,...) => selected: -1
即。即使使用正确的参数调用OnItemClickListener并调用setSelection(1),也没有选择任何项(因此也从不调用OnItemSelectedListener.onItemSelected(...))并且getSelectedItemPosition()在setSelection之后仍然产生-1 (1)-call。
我错过了什么?
迈克尔
PS。:我的列表确实有&gt; = 2个元素......
答案 0 :(得分:8)
这里缺少的元素是choiceMode
。这不是很好documented,但默认情况下,在Android中的ListViews(以及扩展名,任何从AbsListView继承的内容,如GridView等)不允许选择,但它可以启用 - 在XML中或在代码中:
:
<ListView
...
android:choiceMode="singleChoice" />
代码:
mListView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
请注意,一旦你这样做,android会为你setSelection()
,所以你不需要自己跟踪它。那时你的onClickListener只是用于保存选择,我甚至不打扰OnSelectedItemListener:
@Override
public void onItemClick(final AdapterView<?> list, final View v,
final int position, final long id) {
Participant p = mAdapter.getParticipantForId(id);
eventManager.fire(new ParticipantSelectedEvent(p));
pxList.smoothScrollToPosition(position); // Make sure selection is plainly visible
}
答案 1 :(得分:2)
试试这个: -
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// selected item
String product = ((TextView) view).getText().toString();
Toast.makeText(getApplicationContext(), "Selected Item :" +product, Toast.LENGTH_SHORT).show();
}
});
希望它会对你有所帮助。
答案 2 :(得分:1)
我刚刚意识到,我完全没了。在触摸模式下,选择项目根本没有意义。单击时(直接调用OnClickListener ),您只需直接操作它。 我刚刚开始欣赏,Android负责所有这些不同的设备,它们有方向控制按钮,触摸屏等。想象一下,如何在不使用设备的设备上完成操作并不总是很容易到或不能测试。