从多列的ListView的Android调用活动(android invoking activity

2019-10-30 10:21发布

在项目中,我有一个多列的ListView的活动。 这ListView的从我一个单独的Java模块中已经实现了一个自定义的CursorAdapter绘制其数据。 我有一对夫妇的ListView的行内观点的听众,而这些CursorAdapter的内实施。 一位听众的需要编辑调用它的视图内容和数据备份保存到底层数据库。 该编辑需要startActivityForResult(作为一个自定义对话框)。 不过,我得到一个错误作为活动只能从另一个活动调用。 我曾尝试移动startActivityForResult在父活动的程序,但这则是从听者称为静态的过程,我得到一个错误startActivityForResult不能在一个静态的过程。 错误是“的方法startActivityForResult(意向,INT)是未定义的类型新View.OnClickListener(){}”

有没有人从一个视图听众,其中的观点是一个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);

Answer 1:

The method startActivityForResult(Intent, int) is undefined for the type new View.OnClickListener(){}其变得清楚的是startActivityForResult或startActivity如果类扩展Acitvity ..它甚至不会内部类内接受可仅称为.. 。

尝试

((Activity)getBaseContext()).startActivityForResult(intentTimeEdit, EDIT_TIME_REQUEST_CODE); 并检查结果。



Answer 2:

尝试通过上下文在适配器类的构造函数,然后代替

startActivityForResult(intentTimeEdit, EDIT_TIME_REQUEST_CODE);

ctx.startActivityForResult(intentTimeEdit, EDIT_TIME_REQUEST_CODE);


文章来源: android invoking activity from a multi-column listview