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
相关产品推荐
相关产品推荐

