mmo*_*mmo 3 android android-widget android-listview
我在使用我创建的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());
}
});
...
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个并点击例如第二个项目(即pos = 1)时,我得到:
04-03 23:08:36.994: V/DisplayLists(663): onItemClick(..., 1,...) => selected: -1
Run Code Online (Sandbox Code Playgroud)
即使使用正确的参数调用OnItemClickListener并调用setSelection(1),也没有选择任何项(因此也永远不会调用OnItemSelectedListener.onItemSelected(...))并且getSelectedItemPosition()仍然产生-1为setSelection(1)-call.
我错过了什么?
迈克尔
PS.:我的清单确实有> = 2个元素......
这里缺少的元素是choiceMode.这个文档并没有很好的记录,但是默认情况下,Android中的ListViews(以及扩展名,任何继承自AbsListView的内容,如GridView等)不允许选择,但可以在XML或代码中启用它:
在XML中:
<ListView
...
android:choiceMode="singleChoice" />
Run Code Online (Sandbox Code Playgroud)
码:
mListView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
Run Code Online (Sandbox Code Playgroud)
请注意,一旦你这样做,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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11748 次 |
| 最近记录: |