【发布时间】:2011-05-22 20:43:10
【问题描述】:
我在自定义 ListAdapter 中的每一行都有一个自定义视图,我正在尝试执行 onClick 操作并获取列表中单击的行位置。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingLeft="10dip" android:id="@+id/itemRoot" android:clickable="false">
<TextView android:layout_width="wrap_content" android:text="TextView"
android:layout_height="wrap_content" android:id="@+id/itemTxt"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"></TextView>
<TextView android:layout_toRightOf="@+id/itemTxt" android:text="TextView"
android:layout_height="wrap_content" android:layout_alignBottom="@+id/itemTxt"
android:id="@+id/amountTxt" android:paddingLeft="6dip"
android:layout_centerVertical="true" android:layout_width="match_parent"></TextView>
<ImageView android:id="@+id/delBtn" android:layout_height="wrap_content"
android:src="@drawable/delete" android:layout_width="wrap_content"
android:layout_alignParentRight="true" android:paddingRight="10dip"
android:layout_centerVertical="true"></ImageView>
</RelativeLayout>
我想知道何时单击 TextView 或 ImageView,我还需要知道它来自列表中的哪一行。我试过使用 OnItemClickListener ,它可以很好地获取点击来自的行。但是,一旦我为视图注册了 OnClick 侦听器,就会跳过 onItemClicked() 方法并立即执行 onClick(),但是无法获取视图所在的行位置(或者至少不是我知道是否)。
如果我将视图的 clickable 设置为 false,则调用 onItemClicked 并尝试在给定视图上手动调用 performClick()。但这仅适用于根元素(RelativeLayout),如果点击来自布局内的 TextView,则点击不会传播。
我真的不知道如何同时获得列表中的位置并执行 onClick 操作。
欢迎提出任何想法。
亚历克斯
【问题讨论】:
-
在你的布局中,当定位一个相对于另一个视图的视图时,你应该指定锚点的 ID,不带
+符号:android:layout_toRightOf="@id/itemTxt"和android:layout_alignBottom="@id/itemTxt"。"@+id/itemTxt"在为视图创建新 id 时使用(因此在android:id属性的值中)。 -
所有这些代码都是自动生成的,但我会记住这一点 :) Alex