所以我有一个用于列表视图的 CursorAdapter。我希望每个列表项都有 4 个可点击的视图,因为当每件事被点击时我会发生不同的事情......在这里并不重要。
我的问题...是我无法同时获取所选项目(或行)中的数据和在该列表项中单击的视图(1 到 4)。
到目前为止我已经尝试过:
- 当我在我的 CursorAdapter 中覆盖 onClick 时,我可以成功获取视图,但是返回该列表项的数据是不正确的(无论选择了什么,它都只返回列表中的第一个条目的数据)。
- 所以我尝试在托管列表视图的活动中实现 onItemClick。当我这样做时,我能够从选择过的项目中获取数据,但是我无法从列表项中获取四个可点击区域之一。
- 当我尝试使用这两种想法时,CursorAdapter 中的 onClick 覆盖似乎覆盖了活动中的 onItemClick 方法,然后我所能做的就是获得在列表项中选择的正确视图(4 个中的 1 个)。
也许这些策略之一是正确的,我只是没有以正确的方式获取数据或正确获取视图。无论如何,任何帮助将不胜感激!
从我的 CursorAdapter 实现 onClick 时:
@Override
public void bindView(View v, Context context, Cursor c) {
ImageView imPlay = (ImageView) v.findViewById(R.id.row_play_button);
LinearLayout llFirstHalf = (LinearLayout) v.findViewById(R.id.row_first_half);
LinearLayout llSecondHalf = (LinearLayout) v.findViewById(R.id.row_second_half);
CheckBox cbCheck = (CheckBox) v.findViewById(R.id.row_checkbox);
}
public void myOnClick(View v) {
switch(v.getId()){
case R.id.row_checkbox:
//do something
break;
case R.id.row_first_half:
//do something
break;
case R.id.row_second_half:
//do something
break;
case R.id.row_play_button:
//do something
break;
在 MainActivity 中实现 onItemClick 时:
@Override
public void onItemClick(AdapterView<?> parent, View view, int index, long pos) {
Log.e("onITEMCLICK", "index: "+String.valueOf(index));
Log.e("onITEMCLICK", "position: "+String.valueOf(pos));
LinearLayout listItem = (LinearLayout) view;
String title;
String date_created;
String comments;
String sample_rate;
String duration;
String file_size;
String id;
String file_url;
Cursor c = app.rec_adapter.getCursor();
c.moveToPosition(index);
title = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_TITLE));
date_created = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_DATE_CREATED));
comments = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_COMMENTS));
sample_rate = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_SAMPLE_RATE));
sample_rate = convertToHumanReadable(sample_rate);
duration = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_DURATION));
file_size = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_FILE_SIZE));
file_url = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_FILE_URL));
id = c.getString(c.getColumnIndexOrThrow(DBAdapter.rKEY_ROWID));
// find out what section was clicked on the item -- NO SOLUTION
ImageView imPlay = (ImageView) listItem.findViewById(R.id.row_play_button);
LinearLayout llFirstHalf = (LinearLayout) listItem.findViewById(R.id.row_first_half);
LinearLayout llSecondHalf = (LinearLayout) listItem.findViewById(R.id.row_second_half);
CheckBox cbCheck = (CheckBox) listItem.findViewById(R.id.row_checkbox);
}