我在使用我创建的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()仍然产生-1为setSelection(1)-call.
我错过了什么?
迈克尔
PS.:我的列表确实有> = 2个元素……
解决方法:
这里缺少的元素是choiceMode.这不是很好documented,但是默认情况下,AndroID中的ListVIEws(以及扩展名,任何继承自AbsListVIEw的内容,如GrIDVIEw等)不允许选择,但它可以在XML或代码中启用:
在XML中:
<ListVIEw ... androID:choiceMode="singleChoice" />
码:
mListVIEw.setChoiceMode(AbsListVIEw.CHOICE_MODE_SINGLE);
请注意,一旦你这样做,androID会为你设置setSelection(),所以你不需要自己跟踪它.那时你的onClickListener只是用于保存选择,我甚至不打扰OnSelectedItemListener:
@OverrIDepublic 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}
总结 以上是内存溢出为你收集整理的Android ListView:如何选择项目?全部内容,希望文章能够帮你解决Android ListView:如何选择项目?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)