Android - 活动之间的 Snackbar

Posted

技术标签:

【中文标题】Android - 活动之间的 Snackbar【英文标题】:Android - Snackbar between Activities 【发布时间】: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上做吗? 【参考方案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)在通话结束。

【讨论】:

以上是关于Android - 活动之间的 Snackbar的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BroadcastReceiver 中添加 Snackbars?

Android 多行 Snackbar

活动之间的动画 Android c# Xamarin

Android - 活动之间的 Snackbar

Android 在活动之间传递大对象的最佳实践?

Android:如何在包含其他对象的活动之间传递对象