【问题标题】:How can I pass a string through an inner class without finalizing it如何在不最终确定的情况下通过内部类传递字符串
【发布时间】:2011-06-16 01:08:54
【问题描述】:

我已经实现了一个 ListView 并希望 OnClickListener 使用长 id 参数(即单击列表中的哪个项目)来索引我从中填充列表的 String[],以便我可以传递该 String IE。我单击的特定项目的文本。我会把它做成最终的,但这将是一个问题,因为我需要在程序生命周期的后期重新填充这个列表(你可能会说不能用字符串来完成,我可能会切换到 StringBuilder[] 但是如果有人对此部分有任何建议,请随意)。我希望这不会令人困惑,为了详细说明我在做什么,我正在从从 mysql 数据库收集的 String[] 填充 ListView,然后我将稍后根据接近度对列表进行排序(从 GPS 位置获得) 所以因为 listitem 的 id 对于每个人来说都是不同的,所以我将传递组成被点击列表中的项目的文本字符串,所以单独使用项目 id 是不可行的,因为项目 id 用于单个列表(已重新排序)对服务器无用。任何人都可以建议我如何使这成为可能或潜在的解决方法吗?

【问题讨论】:

    标签: android listview parameter-passing listviewitem inner-classes


    【解决方案1】:

    不要将 OnClickListener 与 ListView 一起使用。使用 AdapterView.OnItemSelectedListener。 当你覆盖它的 onItemSelected (AdapterView parent, View view, int position, long id) 方法,你得到 ListView,在列表中被点击的 View,它的位置和它的 id 作为参数。如果列表只是 TextViews,就像普通的 ArrayAdapter,你可以使用 view.getText().toString() 来获取字符串。

    【讨论】:

    • 谢谢,我也意识到我实际上可以替换同一个字符串,我很困惑,因为我读过 String 类是不可变的,但我只是看到了一些他们基本上分配的代码一个字符串,然后使用 .replace 方法并将返回结果分配给同一个字符串,所以看起来这对我来说也不应该是一个问题,我认为这实际上是重新分配字符串指向的地址堆,这样对吗?
    • 是的。不可变与最终不同。不可变意味着您不能更改字符串的字符——没有插入字符、删除字符、添加字符等方法。如果 String 类的方法看起来像这样做,它们实际上是在创建一个新的 String 并重新分配地址。
    • 嘿,我明白你所说的使用 view.getText().toString() 的意思,但是为什么我不能将它与 OnClickListener 一起使用,因为它还在 OnItemClick 构造函数中传递了一个视图?跨度>
    • 它可能会导致 ListView 出现错误,OnItemClick 是正确的方法。另外,您还可以获得您可能需要的项目位置(它可能与数组中字符串的索引相对应)
    • 你的意思是 OnItemSelected 是正确的方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2015-11-02
    • 2012-06-09
    • 2020-09-11
    • 2017-12-24
    • 2013-11-25
    相关资源
    最近更新 更多