【问题标题】:Detecting which view has been pressed inside list item onClick检测在列表项 onClick 中按下了哪个视图
【发布时间】:2013-09-23 13:55:40
【问题描述】:

我正在尝试在ListView 中创建一个具有多个选项的项目; 查看编辑。我想以与 android 的联系人系统完全相同的方式创建它 - 见下文:

我添加了红色框来说明我想要的行为。如果您在左侧红框内按下,您将呼叫该联系人。如果您在右侧的红色框内按,您会向联系人发送一条短信。我已经在 XML 中创建了类似的布局,但是在代码中实现此功能时遇到了麻烦。

我尝试为项目中的单独布局创建自定义android:onClick 函数调用,但调用onClick 方法只允许您将View 作为参数传递,而不是位置。需要使用listview.getItemAtPosition函数的位置,我尝试使用listview.getPositionForView返回位置,但发现这非常不稳定,并且由于视图回收,很容易返回错误的位置。

实现一个列表的最佳方式是由每个项目上具有多个按钮/布局的项目填充?

【问题讨论】:

  • 在您的AdaptergetView() 方法中,您可以获得该职位。同样在那里,您可以为不同的Views 设置onClick()
  • 你找到解决办法了吗??自从我开始在 android 中开发以来,我一直在想同样的事情我还没有得到答案:/

标签: android listview


【解决方案1】:

在仍然使用单个android:onClick 函数的情况下完成此操作的一种方法是对每个可点击视图使用setTag() 方法来存储作为项目位置的整数。例如在适配器的getView():

@Override
public View getView(int position, View convertView, ViewGroup arg2) {
    ...
    ImageView textMessageView = (ImageView)convertView.findViewById(R.id.whatever);
    textMessageView.setTag(new Integer(position));
    ...
}

然后在您的 onClick() 方法中,您可以执行以下操作:

@Override
public void onClick(View clickedView) {
    int position = clickedView.getTag() instanceof Integer ? ((Integer)clickedView.getTag()).intValue() : -1;
    ...
}

不知道这是否理想,但它允许您使用 XML android:onClick 工具,并且不涉及为每个列表视图项创建单独的 onClick 侦听器。

【讨论】:

  • 我一直在拼命想让它发挥作用。我一直在 onClick 函数中使用 view.getTag(),但它总是返回 null,即使我肯定它是在适配器中设置的。
【解决方案2】:

我也参与过类似的项目。 为此,我创建了自己的布局,有两个线性布局,分别是 linearLayoutLeftlinearLayoutRight

然后我将此布局添加到 listView。

然后我提到了Listview的onClickListener,我用来获取在listView中的位置被点击的视图。 所以对于 listView 中的每一行,我有两个线性布局,它们有自己的 onClickListeners。

【讨论】:

  • 如何添加多个onClickListeners?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 2010-12-20
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多