我在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();
}
}
答案 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 。它只是一个假设,因为你没有给出 整个代码。