0

所以我有一个用于列表视图的 CursorAdapter。我希望每个列表项都有 4 个可点击的视图,因为当每件事被点击时我会发生不同的事情......在这里并不重要。

列表查看项目

我的问题...是我无法同时获取所选项目(或行)中的数据和在该列表项中单击的视图(1 到 4)。

到目前为止我已经尝试过:

  1. 当我在我的 CursorAdapter 中覆盖 onClick 时,我可以成功获取视图,但是返回该列表项的数据是不正确的(无论选择了什么,它都只返回列表中的第一个条目的数据)。
  2. 所以我尝试在托管列表视图的活动中实现 onItemClick。当我这样做时,我能够从选择过的项目中获取数据,但是我无法从列表项中获取四个可点击区域之一。
  3. 当我尝试使用这两种想法时,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);



}
4

0 回答 0