[英]android invoking activity from a multi-column listview
在我的项目中,我有一个带有多列ListView的活动。 这个ListView从我在单独的Java模块中实现的自定义CursorAdapter绘制数据。 我在ListView的行中的几个视图上都有侦听器,并且这些侦听器是在CursorAdapter中实现的。 侦听器之一需要编辑调用它的视图内容,并将数据保存回基础数据库。 此编辑需要startActivityForResult(作为自定义对话框)。 但是我收到一个错误,因为一个活动只能从另一个活动中调用。 我曾尝试将startActivityForResult移至父活动中的过程,但这必须是要从侦听器调用的静态过程,并且由于startActivityForResult不能处于静态过程中,因此我收到错误消息。 错误是“对于类型为new View.OnClickListener(){}的方法startActivityForResult(Intent,int)未定义”
有没有人有一个从视图侦听器调用活动的过程,其中视图是ListView的行元素?
下面的代码是我在CursorAdapter中使用的过程。
public class CustomCursorAdapter extends CursorAdapter {
protected static class RowViewHolder {
public Button btnLap;
public TextView tvTime;
}
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.btnLap.setOnClickListener(btnLapOnClickListener);
holder.tvTime.setOnClickListener(tvTimeOnClickListener);
retView.setTag(holder);
return retView;
}
...
private OnClickListener tvTimeOnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
TextView tv = (TextView) v;
String strTime = tv.getText().toString();
Intent intentTimeEdit = new Intent(getBaseContext(), TimeEditDialog.class);
intentTimeEdit.putExtra("Time", strTime);
startActivityForResult(intentTimeEdit, EDIT_TIME_REQUEST_CODE);
}
};
根据下面的评论,OnClickListener的代码已更正为:
TextView tv = (TextView) v;
String strTime = tv.getText().toString();
RowViewHolder holder = new RowViewHolder();
holder = (RowViewHolder) ((View) v.getParent()).getTag();
Intent intentTimeEdit = new Intent(holder.ctx, TimeEditDialog.class);
intentTimeEdit.putExtra("Time", strTime);
((Activity)holder.ctx).startActivityForResult(intentTimeEdit, EDIT_TIME_REQUEST_CODE);
从The method startActivityForResult(Intent, int) is undefined for the type new View.OnClickListener(){}
它清楚地表明,只有在类扩展了Acitvity时,才可以调用startActivityForResult或startActivity。它甚至不接受内部类。 。
尝试
((Activity)getBaseContext()).startActivityForResult(intentTimeEdit, EDIT_TIME_REQUEST_CODE);
并检查结果。
尝试在适配器类的构造函数中传递上下文,然后代替
startActivityForResult(intentTimeEdit, EDIT_TIME_REQUEST_CODE);
做
ctx.startActivityForResult(intentTimeEdit, EDIT_TIME_REQUEST_CODE);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.