检测列表项中的哪个视图已按下onClick

时间:2013-09-23 13:55:40

标签: android listview

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

Similar functionality in android contacts app

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

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

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

2 个答案:

答案 0 :(得分:0)

在使用单个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侦听器。

答案 1 :(得分:0)

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

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

然后我提到了Listview的 onClickListener ,我曾经在listView中的位置点击了视图。 因此对于listView中的每一行,我有两个linearLayouts,并且它们有自己的onClickListeners。