2

アクティビティ Bのコールバックが完了したときに、アクティビティ A (coordinatorLayout はこちら) にスナックバーを表示するにはどうすればよいですか? Snackbar には coordinatorLayout が必要ですが、Activity B からは提供できません。

アクティビティ B :

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if(id == android.R.id.home) {
        this.finish();
        return true;
    } else if(id == R.id.action_add) {
        callAddObject();
        this.finish();
        return true;
    }

    return super.onOptionsItemSelected(item);
}

public void callAddObject() {
    [...]
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Request request, IOException e) {
            Log.d(TAG, "onFailure: " + e.getMessage());
            // show snackbar in Activity A
        }

        @Override
        public void onResponse(Response response) throws IOException {
            Log.d(TAG, "onResponse: " + response.body().string());
            // show snackbar in Activity A
        }
    });
}

手伝ってくれてありがとう。

4

1 に答える 1

5

次のように、アクティビティ A からアクティビティ B を開く必要があります。

startActivityForResult(activityBIntent, FORM_REQUEST_CODE);

次に、フォームが送信されたら、結果でアクティビティ B を終了します

@Override
public void onFailure(Request request, IOException e) {
    Log.d(TAG, "onFailure: " + e.getMessage());
    // You might not want to finish the activity here, instead, you can show an error here
}

@Override
public void onResponse(Response response) throws IOException {
    Log.d(TAG, "onResponse: " + response.body().string());
    setResult(FORM_SUBMITTED);
    finish();
}

アクティビティAのようにそれに反応します

@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    switch (requestCode) {
        case FORM_REQUEST_CODE:
            if (resultCode == ActivityB.FORM_SUBMITTED) {
                Snackbar.make(mView, "Form submitted", Snackbar.LENGTH_SHORT).show();
            }
    }
}

別の解決策は、たとえば IntentService でサーバーを呼び出し、何らかのイベント バス(つまりOtto ) を使用して、呼び出しが終了するとすぐにアクティビティ A にイベントを送信することです。

于 2016-02-16T18:58:40.140 に答える