【问题标题】:Android - Snackbar between ActivitiesAndroid - 活动之间的 Snackbar
【发布时间】:2015-09-29 09:03:46
【问题描述】:

当我在 Activity B 中的回调完成时,我如何在 Activity 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
        }
    });
}

感谢您的帮助。

【问题讨论】:

  • 屏幕上只能有 1 个 Activity。
  • 当然可以,但我不能像监听器那样在活动 B 完成时警告活动 A 或其他什么?
  • 正如 Gabriele 的评论所暗示的那样,您的问题可能可以通过其他方式解决。你的 2 个活动是做什么的,他们为什么要在另一个活动中创建一个小吃店?
  • 活动 B 是一个表单,当表单提交时,我想关闭 B 并在 A 中添加小吃栏以表示成功或错误。如果不可能,我也可以在 B 中添加小吃店并在之后重定向到 A ..
  • 可以在onActivityResult上做吗?

标签: android android-activity android-snackbar snackbar


【解决方案1】:

你应该像这样从 Activity A 打开 Activity 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();
}

并在 Activity 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)在通话结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多