Android - кодирование onActivityResult для встроенного startActivityresult в пользовательском CursorAdapter

В моем проекте у меня есть активность с многоколоночным ListView. Этот ListView извлекает данные из пользовательского CursorAdapter, который я реализовал в отдельном модуле Java. У меня есть прослушиватели для нескольких представлений в строках ListView, и они реализованы в CursorAdapter. Один из слушателей должен отредактировать содержимое представления, вызвавшее его, и сохранить данные обратно в базовую базу данных.

Основываясь на совете, полученном здесь, мне удалось закодировать стартактивитифоррезультат. Однако я не могу найти, как и где кодировать процедуру 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;
}

...

private OnClickListener tvTimeOnClickListener = new OnClickListener() {
    @Override
    public void onClick(View v) {
            TextView tv = (TextView) v;
            String strTime = tv.getText().toString();
            // get the RowViewHolder
            RowViewHolder holder = new RowViewHolder();
            holder = (RowViewHolder) ((View) v.getParent()).getTag();
            Intent intentTimeEdit = new Intent(holder.ctx, TimeEditDialog.class);
            intentTimeEdit.putExtra("Time", strTime);
            // Set up intent to pass to dialog
            ((Activity)holder.ctx).startActivityForResult(intentTimeEdit, EDIT_TIME_REQUEST_CODE);
        }
    }
};

}


person jrisch    schedule 27.08.2013    source источник


Ответы (1)


Я решил проблему. Для всех, у кого есть аналогичная проблема, в прослушивателе элемента строки ListView в пользовательском CursorAdapter я вызвал статическую процедуру, editTime в родительском действии, я передал действие, приведя к нему контекст, ctx, представление элемента и rowid для базы данных. «держатель» — это rowviewholder, помеченный в представлении строки.

                RaceSheetActivity.editTime((Activity)holder.ctx, v, holder.intId);

Подпрограмма editTime вызвала мою активность 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 и должен был управлять ею в родительском действии, и что я мог привести действие, необходимое для диалога startActivityForResult, из переданного контекста. через CursorAdapter и обработать ответ в родительском действии.

Любые способы улучшить это будут приняты с благодарностью.

person jrisch    schedule 02.09.2013