当我回到之前的Activity时,SnackBar仍然显示

时间:2016-02-03 12:19:41

标签: android android-activity android-snackbar

我在SnackBar A中有一个Activity,如果我点击Button AI Activity导航到Activity B.如果我立即按下,我可以看到SnackBar A中仍然显示Activity

用户离开SnackBar后如何制作dismiss Activity

我的努力:

写了一个处理SnackBar和

的创建和解散的泛型类

创建SnackBar:

public static Snackbar showSnackBar(View view, int text) {
    if(snackBar != null && snackBar.isShown()) {
        snackBar.setText(text);
    } else {
        snackBar = snackBar.make(view, text, Snackbar.LENGTH_LONG);
    }
    if (!AppRunningState.isApplicationBroughtToBackgrounds(App.get())) {
        snackBar.show();
    }
    return snackBar;
}

onPause

@Override
protected void onPause() {
    super.onPause();
    SVSnackBar.dismissSnackBar();
}

public static void dismissSnackBar() {
    if (snackBar != null) {
        snackBar.dismiss();
    }
}

3 个答案:

答案 0 :(得分:2)

嗯......通常你只需要一个Snackbar用于一个Activity / layout。因此,一种方法是编写一个BaseActivity,其中包含对Snackbar的引用。

public class BaseActivity extends Activity { // use the one you want to extend

    private Snackbar snackbar;

    public void showSnackbar(View view, int textResId) {
        if (snackbar != null) {
            snackbar.dismiss();
        }
        snackbar = Snackbar.make(view, textResId, Snackbar.LENGTH_LONG);
        snackbar.show();
    }

    @Override
    public void onPause() {
        super.onPause();
        if (snackbar != null) {
            snackbar.dismiss();
        }
     }
}

现在始终为您正在使用的每个Activity扩展BaseActivity。这与你正在做的事情基本相同,但你不需要额外的类来处理你的Snackbar而且你不必每次都覆盖onPause()。

答案 1 :(得分:0)

启动其他活动时,在dismiss()上致电Snackbar

答案 2 :(得分:-1)

试试这段代码。这应该可以解决问题。

   snackbar = Snackbar.make(loginView, text, Snackbar.LENGTH_LONG);
        snackbar.setActionTextColor(getResources().getColor(R.color.colorAccent));
        snackbar.setAction("Close", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                snackbar.dismiss();
            }
        });
        snackbar.show();

此处 setAction()是可选的。仅在您希望在持续时间结束前关闭小吃栏时才需要使用。

修改

  

您面临的问题可能是因为您调用 showSnackBar   在 onCreate 方法或您调用的任何方法中   在 onCreate 。它只是一个假设,因为你没有给出   整个代码。