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