我正在扩展CursorAdapter
以将数据绑定到ListView
中的视图。当项目中的子视图具有onClick()
侦听器时,不会为该行调用onItemClick()
。我希望调用子视图的onClick()
方法,调用onItemClick()
方法,触摸时要突出显示的行(默认情况下,当子视图没有{{1}时附上)。其他触摸方法(如onClickListener()
)返回onLongClick()
,指示触摸事件是否已被使用,但boolean
方法返回void,并且表现得好像{{1}返回onClick()
。
在我的activity_main.xml中,我有:
boolean
对于填充true
:
<ListView ...[attributes] ...
android:id="@+id/stations" >
</ListView>
和我的ListView
班级:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout ...[attributes] ... >
<ImageView
...[attributes] ...
android:id="@+id/station_drag" />
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
...[attributes] ...
android:id="@+id/station_title" >
</TextView>
</RelativeLayout>
我已尝试获取CursorAdapter
的父级及其父级,并手动调用public class RadioCursorAdapter extends CursorAdapter {
protected Activity mContext;
public RadioCursorAdapter(Activity context, Cursor c, int flags) {
super(context, c, flags);
this.mContext = context;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView titleView = (TextView) view.findViewById(R.id.station_title);
final String url = cursor.getString(cursor.getColumnIndexOrThrow(RadioDbContract.StationEntry.COLUMN_NAME_URL));
titleView
.setText(cursor.getString(cursor.getColumnIndexOrThrow(RadioDbContract.StationEntry.COLUMN_NAME_TITLE)));
// commenting out the following makes the listView's onItemClickListener
// work, and row highlights while pressed
titleView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// this part works when the text is clicked, but prevents
// onItemClick in listview
}
});
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final LayoutInflater inflater = LayoutInflater.from(mContext);
View v = inflater.inflate(R.layout.station_entry, null);
return v;
}
}
,但这似乎不起作用,titleView
是一个不同的处理程序。
我在视图层次结构的每个级别尝试了onClick()
,onItemClick()
和android:descendantFocusability
的每个组合,我可以想到。
请将其他评论中的任何答案与我可能采取的不同做法分开(比如不为每个视图创建新的听众?)
<小时/> 修改
android:focusable
和android:clickable
似乎都会阻止setOnClickListener()
在短暂点击时触发,无论setOnLongClickListener()
是返回true还是false。
此外,要触发onItemClick()
的子视图,setOnLongClickListener()
的{{1}}应设置为onItemClick()
,并且应设置子视图'RelativeLayout
到android:descendantFocusability
。似乎没有其他任何工作或有任何影响。