Listview Android-在自定义游标适配器中为嵌入式startActivityresult编码ActivityResult

Listview Android-在自定义游标适配器中为嵌入式startActivityresult编码ActivityResult,listview,android-cursoradapter,multiple-columns,onactivityresult,Listview,Android Cursoradapter,Multiple Columns,Onactivityresult,在我的项目中,我有一个带有多列列表视图的活动。此ListView从我在单独的java模块中实现的自定义游标适配器中提取数据。我在ListView的行中有几个视图的侦听器,这些都是在CursorAdapter中实现的。其中一个侦听器需要编辑调用它的视图内容,并将数据保存回基础数据库 根据收到的建议,我成功地编写了startActivityForResult。但是,我找不到如何或在何处编写onActivityResult例程来处理对话框活动的响应。有人有什么建议吗 public class Cust

在我的项目中,我有一个带有多列列表视图的活动。此ListView从我在单独的java模块中实现的自定义游标适配器中提取数据。我在ListView的行中有几个视图的侦听器,这些都是在CursorAdapter中实现的。其中一个侦听器需要编辑调用它的视图内容,并将数据保存回基础数据库

根据收到的建议,我成功地编写了startActivityForResult。但是,我找不到如何或在何处编写onActivityResult例程来处理对话框活动的响应。有人有什么建议吗

public class CustomCursorAdapter extends CursorAdapter {

private static final String TAG = CustomCursorAdapter.class.getSimpleName();
private static final int EDIT_TIME_REQUEST_CODE = 11;

protected static class RowViewHolder {
    public Button btnLap;
    public TextView tvTime;
    public Context ctx;
}

public CustomCursorAdapter(Context context, Cursor c) {
    super(context, c);
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View retView = inflater.inflate(R.layout.single_row_item, parent, false);

    RowViewHolder holder = new RowViewHolder();
    holder.btnLap = (Button) retView.findViewById(R.id.btn_lap);
    holder.tvTime = (TextView) retView.findViewById(R.id.tv_time);
    holder.ctx = context;
    holder.btnLap.setOnClickListener(btnLapOnClickListener);
    holder.tvTime.setOnClickListener(tvTimeOnClickListener);

    retView.setTag(holder);

    return retView;
}


}我已经解决了这个问题。对于任何有类似问题的人,在自定义游标适配器中ListView的row元素的侦听器中,我调用了一个静态例程,在父活动中的editTime,我传递了一个活动,向其强制转换上下文ctx、项的视图和数据库的rowid。“holder”是在行视图中标记的rowviewholder

                RaceSheetActivity.editTime((Activity)holder.ctx, v, holder.intId);
editTime例程称为my TimeEditDialog活动:

public static void editTime(Activity activity, View v, long intTargetId) {
    tvTarget = (TextView) v;
    String strTime = tvTarget.getText().toString();
    // Set up intent to pass to dialog
    Intent intentTimeEdit = new Intent(activity.getBaseContext(), TimeEditDialog.class);
    intentTimeEdit.putExtra("Request Code", EDIT_TIME_REQUEST_CODE);
    intentTimeEdit.putExtra("Time", strTime);
    intentTimeEdit.putExtra("Row Id", intTargetId);
    activity.startActivityForResult(intentTimeEdit,EDIT_TIME_REQUEST_CODE);
}
然后在父活动的onActivityResult方法中处理来自对话框的响应

问题区域意识到,如果我将处理保持在自定义游标适配器中,并且必须在父活动中管理,则无法解决静态/非静态调用,我可以从传递给CursorAdapter的上下文中转换启动TactivityForresult对话框所需的活动,并在父活动中处理响应

如果有任何改进的方法,我们将不胜感激

public static void editTime(Activity activity, View v, long intTargetId) {
    tvTarget = (TextView) v;
    String strTime = tvTarget.getText().toString();
    // Set up intent to pass to dialog
    Intent intentTimeEdit = new Intent(activity.getBaseContext(), TimeEditDialog.class);
    intentTimeEdit.putExtra("Request Code", EDIT_TIME_REQUEST_CODE);
    intentTimeEdit.putExtra("Time", strTime);
    intentTimeEdit.putExtra("Row Id", intTargetId);
    activity.startActivityForResult(intentTimeEdit,EDIT_TIME_REQUEST_CODE);
}