草庐IT

安卓 ListView : how to select an item?

coder 2023-12-25 原文

我在使用我创建的 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)-调用。

我错过了什么?

迈克尔

PS.: 我的列表确实有 >=2 个元素...

最佳答案

此处缺少的元素是 choiceMode。这不是很好documented , 但默认情况下,android 中的 ListViews(以及从 AbsListView 继承的任何东西,如 GridView 等)不允许选择,但可以启用它 - 无论是在 XML 中还是在代码中:

在 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
}

关于安卓 ListView : how to select an item?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10002839/

有关安卓 ListView : how to select an item?的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. (一)专题介绍:移动端安卓手机改造成linux服务器&linux服务器中安装软件、部署前后端分离项目实战 - 2

    快捷目录前言一、涉及到的相关技术简介二、具体实现过程及踩坑杂谈1.安卓手机改造成linux系统实现方案2.改造后的手机Linux中软件的安装3.手机Linux中安装MySQL5.7踩坑实录4.手机Linux中安装软件的正确方法三、Linux服务器部署前后端分离项目流程1.前提准备(安装必要软件,搭建环境):2.前后端分离项目的详细部署过程:总结前言总体概述:本篇文章隶属于“手机改造服务器部署前后端分离项目”系列专栏,该专栏将分多个板块,每个板块独立成篇来详细记录:手机(安卓)改造成个人服务器(Linux)、Linux中安装软件、配置开发环境、部署JAVA+VUE+MySQL5.7前后端分离项目

  3. javascript - 如何在 ListView React-native 中过滤数据? - 2

    我正在尝试过滤我的数组对象列表,然后尝试使用新数据源在ListView中显示。但是,该列表未被过滤。我知道我的过滤器功能正常工作。(我在console.log里查过了)我正在使用Redux将我的状态映射到prop。然后尝试过滤Prop。这是错误的方法吗?这是我的代码:/*globalfetch:false*/import_from'lodash';importReact,{Component}from'react';import{ListView,TextasNText}from'react-native';import{connect}from'react-redux';import

  4. javascript - react native ListView onEndReached 多次调用 - 2

    我在使用ReactNative中的ListViewonEndReached组件时遇到了一些问题。渲染代码:@autobind_fetchMoreHistory(){console.log("Fetchmorehistorycalled");}我打开屏幕的那一刻_fetchMoreHistory被调用了两次并且在到达onEndReached之后正常工作。有人可以帮助调试吗? 最佳答案 我遇到了同样的问题并进行了很多搜索但没有找到任何答案,所以我使用了一个条件来检查第一个请求是否得到了我再次触发的数据,否则我没有例子//onEndRea

  5. javascript - win-listview的高度是怎么设置的? - WinJS - 2

    这让我难以自拔。我不知道如何使ListView的高度自动。即扩展ListView的高度以占据它需要的所有空间,并让外部容器提供溢出滚动功能。不幸的是,我似乎找不到任何关于此的文档。帮助会很大。谢谢! 最佳答案 默认情况下,ListView控件的高度为400像素。那是在ui-light.css文件的第1421行。您可以通过在页面上添加规则来覆盖它,例如:.win-listview{高度:100%;/*(或者你可以用'600px'之类的绝对指定)*/关于thispage在开发中心它说...SettingtheListViewcontro

  6. 微信小程序安卓视频播放卡顿问题 - 2

    在微信小程序开发中遇到在video组件的两个问题1.安卓手机里播放视频会有明显的卡顿问题刚开始以为是网络问题,或者是视频文件问题。排查了一下发现都没问题最后加了个属性就OK了uniapp和原生小程序方法:custom-cache="false"custom-cache={{false}}video组件兼容iOS手机custom-cache加了这个属性会让2.iOS手机第一次播放视频会有几秒黑屏问题因此我加了当前手机型号的判断uni.getDeviceInfo().deviceType获取当前设备api当为iPhone时不加custom-cache属性,否则加上custom-cache=“fal

  7. javascript - react native : ListView not displaying all rows - 2

    我试图在ReactNativeListView中显示行列表,但它只显示适合单个屏幕的条目,即我无法向下滚动以查看更多行。样式如下:styles=StyleSheet.create({container:{flex:1,marginTop:60},rowContainer:{flexDirection:'row',justifyContent:'space-around'}})ListView:return({this.getHeader()})行:return({text})我做错了什么? 最佳答案 我有同样的问题,发现外面有包装V

  8. 安卓渐变的背景框实现 - 2

    安卓渐变的背景框实现1.背景实现方法1.利用PorterDuffXfermode进行图层的混合,这是最推荐的方法,也是最有效的。2.利用canvas裁剪实现,这个方法有个缺陷,就是圆角会出现毛边,也就是锯齿。3.利用layer绘制边框1.背景万恶的设计小姐姐又来搞事情啦,你说好好的设计一个纯色的背景框框不好嘛,非要把一个框框弄成渐变的,如果不拿出放大镜估计没几个人能看出来它是渐变的。来,我让你看看是啥样框子是从左到右渐变的,设计应该是做了一个底图,然后上面盖了一个白色圆角矩形。那么我们该怎么去实现它呢?实现方法下面介绍三种实现它的方法。先贴上源码地址,大家记得给个starhttps://git

  9. javascript - 如何在 React-Native 中选择 ListView 的一项? - 2

    我是React-Native的新手。我想使用ListView选择一项。当我第一次按下item时,调用了ListView的renderRow(),但是终究还是不行!这个bug怎么解决?我的问题在哪里?我在here写了一个demo 最佳答案 我最初设置了空数据源,然后将其设置为使用componentDidMount中的数据变量进行克隆。然后,在onPressRow方法中,我对数据状态变量的副本进行了必要的更改,然后通过setState方法将其设置回数据。不确定您的问题是什么,但现在可以使用了。importReact,{Component

  10. javascript - 如何在 QML 中访问 ListView 的 ListModel 的 ListElement 的映射委托(delegate)数据? - 2

    本质上,我有一个普通的ListView:Rectangle{id:mylistListModel{id:mylistModelListElement{text:"blah1"}ListElement{text:"blah2"}ListElement{text:"blah3"}}Component{id:mylistDelegateText{id:mylistDelegateTexttext:textpropertyboolmylistDelegateTextEnabled:false}}ListView{id:mylistViewmodel:mylistModeldelegate:my

随机推荐