我对自定义 ListAdapter 中的每一行都有一个自定义 View ,我正在尝试执行 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 并且它可以很好地获取点击来自的行。但是,一旦我为 View 注册了 OnClick 监听器,就会跳过 onItemClicked() 方法并立即执行 onClick(),但是无法获取 View 所在的行位置(或者至少不是我知道是否)。
如果我将 View 的 clickable 设置为 false,则会调用 onItemClicked,并且我尝试在给定 View 上手动调用 performClick()。但这仅适用于根元素 (RelativeLayout),如果点击来自布局内的 TextView,则点击不会传播。
我真的不知道如何在列表中同时获得位置和执行 onClick 操作。
欢迎任何想法。
亚历克斯
最佳答案
您可以从 ListAdapter
的覆盖 getView
方法。
在该方法中,您知道项目的位置,因此您可以将它传递给自定义监听器类,并在那里根据需要使用它:
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
// TODO: instantiate the layout
// here I call a super method
final View view = super.getView(position, convertView, parent);
final TextView textView = (TextView)view.findViewById(R.id.itemTxt);
textView.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Log.i("Click", "TextView clicked on row " + position);
}
});
final ImageView imageView = (ImageView)view.findViewById(R.id.delBtn);
imageView.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Log.i("Click", "ImageView clicked on row " + position);
}
});
return view;
}
关于android - ListView 中的 OnItemClickListener 和 OnClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6090666/