繁体   English   中英

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

[英]Detecting which view has been pressed inside list item onClick

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

Android通讯录应用中的类似功能

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

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

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

在仍使用单个android:onClick函数的情况下实现此目的的一种方法是,对每个可点击视图使用setTag()方法来存储作为项目位置的Integer。 例如,在适配器的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侦听器。

我也从事过类似的项目。 为此,我创建了自己的布局,该布局具有两个线性布局,即linearLayoutLeftlinearLayoutRight

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

然后我提到的列表视图的onClickListener,我以前getThe视图被点击在列表视图的位置。 因此,对于listView中的每一行,我都有两个linearLayouts,它们具有自己的onClickListeners。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM