You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何获取Custom ListView选中项的取值?

解决Custom ListView选中项取值显示对象地址的问题

嘿,我完全懂你现在的困惑——你选中ListView里的项后,日志打出来的全是com.app.com.smsapp.ThreeStrings@xxxxxx这种东西,根本看不到实际想要的数据对吧?这其实是Java的默认行为在搞鬼:当你直接打印一个自定义对象时,它会调用默认的toString()方法,输出的就是类的全路径加上对象在内存中的哈希码,不是你要的字段值。

下面给你两种简单的解决办法:

方法一:重写ThreeStrings类的toString()方法

这是最一劳永逸的方式,以后不管在什么地方打印这个对象,都会输出你想要的内容。只要在你的ThreeStrings类里加上这段代码就行:

public class ThreeStrings {
    // 你的字段、构造方法、getter/setter都保留不动
    private String str1;
    private String str2;
    private String str3;

    // ... 这里是你的构造方法和getter/setter ...

    @Override
    public String toString() {
        // 按照你需要的格式拼接字段,比如这样:
        return "选中内容:[" + str1 + ", " + str2 + ", " + str3 + "]";
        // 你也可以改成更贴合你需求的格式,比如只返回某个特定字段
    }
}

之后你再打印选中的对象,日志里就会显示你定义的实际内容啦。

方法二:直接调用对象的getter方法获取具体字段

如果你不想修改ThreeStrings类,也可以在ListView的点击事件里,拿到对象后直接调用它的getter方法取出每个字段的值:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // 先获取选中的ThreeStrings对象
        ThreeStrings selectedItem = (ThreeStrings) parent.getItemAtPosition(position);
        // 用getter取出每个字段
        String firstStr = selectedItem.getStr1();
        String secondStr = selectedItem.getStr2();
        String thirdStr = selectedItem.getStr3();
        // 打印或者使用这些值
        Log.i("Item", "Selected: " + firstStr + " | " + secondStr + " | " + thirdStr);
    }
});

两种方法都能解决你的问题,个人更推荐第一种,因为重写toString()后,后续调试或者其他场景打印对象都会更方便~

内容的提问来源于stack exchange,提问作者JoDee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:32:45