【问题标题】:Uniquely identify an item's element in ListView在 ListView 中唯一标识一个项目的元素
【发布时间】:2016-04-14 19:53:59
【问题描述】:

你能帮我找到某个项目的textView吗?例如,我有一个包含一些项目的列表视图,每个项目由 3 个文本视图(名称、价格、描述)组成。现在我想用 updateView(int index) 方法改变“price”textView 的值。如何在正确的项目中识别正确的 textView?

假设我有 5 件商品(product1、...、product5)。 现在我想更新第三个产品(product3)的价格。 我打电话给updateView(3) 到目前为止我的 updateView(int index) 方法

private void updateView(int index){
    // thats how I get the row
    View v = lvProduct.getChildAt(index); 
    // now I want to find the tvPrice in that row
    // but I'm not sure how to go about this
}

任何提示都会很棒:D

【问题讨论】:

  • 为什么不更新数据源并在适配器上调用notifyDataSetChanged()
  • 问题是,当我尝试使用 findViewById(R.id.tvPrice) 执行此操作时,它每次都会更新第一项的 tvPrice,似乎我无法完全控制它......我所需要的只是一种方法来确定第一项中的哪个 tvPrice,第二项中的哪个,依此类推,然后能够调用该特定的 tvPrice,然后在该 textview 上调用setText() ......或者我错过了某事
  • 有一个比这更简单的方法。让 ListView 为您工作。只需更改数据源、您的 ArrayList 或您用作数据源的任何内容。

标签: java android listview


【解决方案1】:

我通常的处理方法是执行以下操作:

  • 为您的列表项创建一个模型(现在人们更喜欢使用 RecyclerView) - 该模型当然会有代表您想要显示的内容的字段/变量(例如 3 个字符串)。
  • 现在,要实际跟踪用户单击的项目,我可以通过调用我的适配器中的自定义方法,如 getItem(int position ) 返回一个实际的项目。
  • getItem 方法将返回一个带有 getId() getter 方法的项目。
  • 现在请注意,当您创建要传递给自定义适配器的列表项时,您的列表项模型必须在其构造函数中期望一个 (id) 值,因为这样您就可以访问表中的实际值编辑。
  • 然后您使用您单击的项目的 id 查询您的表并更新它,然后通过您的适配器自动更新视图。

我希望这会有所帮助!

【讨论】:

  • 感谢您的快速回复,但这里有一个问题,我根本没有使用 onClick 方法,我通过 GCM 发送新价格(连同它影响的行的 ID)和用BroadcastReceiver 抓住它。是的,我确实制作了自己的 CustomAdapter,它在构造函数中获得了 layoutResource(带有三个 textView),但我仍然不明白如何访问项目中的 tv-s,如果您能给我提供一个,我将不胜感激示例(我在 android 开发方面没有那么丰富的经验)非常感谢您抽出宝贵时间提供帮助。
猜你喜欢
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
相关资源
最近更新 更多