4

私の状況をうまく説明できることを願っています。

基本的に新しいアイテムを追加するためのフォームであるアクティビティ (A) があり、いくつかのテキスト フィールド、時間と場所のフィールドがあります。setlocation ボタンをクリックすると、locactins の提案を提示するカスタマイズされた ArrayAdapter を含むリスト ビューを持つ 2 番目のアクティビティ (B) が呼び出されます。1 つの項目 (アダプター クラス内の OnClickListener) をクリックすると、その項目をアクティビティ A に戻す必要があります。

A からアクティビティ B を呼び出す

Intent I = new Intent(getApplicationContext(), TaskGeoSetActivity.class);
startActivityForResult(I, LOC_ACTIVITY_CODE);

アクティビティ B 内のアダプターの設定

Adapter = new TaskGeoSubBaseAdapter(getApplicationContext(), R.id.sugtext, result);
Adapter.setActivity(TaskGeoSetActivity.this);
lv.setAdapter(Adapter);

アダプター内の OnClick イベント

public void setActivity(Activity act) {
    parentAct = act;
}

private final OnClickListener locpicker = new OnClickListener() {

        @Override
        public void onClick(View v) {
            Address a = items.get((Integer) v.getTag());
            Intent intent = new Intent(context, TaskAddActivity.class);
            intent.putExtra("Address", a);
            parentAct.setResult(parentAct.RESULT_OK, intent);
        }

};
4

3 に答える 3

5

クリック ハンドラーをこれに置き換えます。

private final OnClickListener locpicker = new OnClickListener() {

    @Override
    public void onClick(View v) {
        Address a = items.get((Integer) v.getTag());
        Intent intent = new Intent(context, TaskAddActivity.class);
        intent.putExtra("Address", a);
        ((Activity)v.getContext()).setResult(parentAct.RESULT_OK, intent);
        ((Activity)v.getContext()).finish();
    }
}

呼び出し元のアクティビティで onActivityResult をオーバーライドして、結果を処理します。OUR_REQUEST_CODE は、startActivityForResult を呼び出したときに送信したリクエスト コードです。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode){
        case OUR_REQUEST_CODE:
            if(resultCode == RESULT_OK) {
                //Do something useful with data
            }
            break;
    }
}
于 2015-05-17T09:08:24.727 に答える
0

setResultアクティビティ A にデータを戻すには、関数を と組み合わせて使用​​する必要がありますstartActivityForResult

この回答を参照してください:

https://stackoverflow.com/a/14118010/238180

于 2013-01-17T13:45:44.663 に答える
0

B に結果を設定する必要があります。 ただactivityする必要はありません:Adapter.setActivity(TaskGeoSetActivity.this);this.setResult(parentAct.RESULT_OK, intent);

private final OnClickListener locpicker = new OnClickListener() {

    @Override
    public void onClick(View v) {
        ActivityB.this.setResult(...);
        finish();
    }
于 2013-01-17T13:46:00.860 に答える