Android Studio - Snackbar仅在Android 4.4及更高版本中首次展示

时间:2016-02-17 12:40:03

标签: android android-studio android-design-library android-snackbar

我使用SnackbarsetAction创建了一个简单的QUIZ应用程序 如果每个问题的答案都不正确,Snackbar会显示。 我使用以下代码初始化Snackbar

Snackbar snackbar; //set the snackbar as global
View coordinatorLayoutView; // //set the coordinatorLayoutView as global

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_quiz);

    ...

    //Initializing coordinatorLayoutView of Snackbar
    coordinatorLayoutView = findViewById(R.id.viewCoordinate);

    //Intializing Snacbar setAction onClick listener
     final View.OnClickListener clickListener = new View.OnClickListener() {
            public void onClick(View v) {
                ...
                //Don't dismiss Snackbar when calling this function
            }
        };

    //Initializing Snackbar
     snackbar = Snackbar.make(coordinatorLayoutView,"Wrong Answer!",
                Snackbar.LENGTH_INDEFINITE).setAction("REVIEW", clickListener);
}

然后,当我想表明它时,我刚刚打电话给:snackbar.show();
当我想解雇时,我只是打电话给:snackbar.dismiss();

当我尝试在Samsung Device with Android Version 4.1.2中运行项目时,结果是预期的,当我想显示它正在显示的小吃栏时。

但当我尝试Other Device with Android Version 4.4 and Lollipop时,它只是在第一次显示,然后当我再次调用它时,Snackbar再也不会显示了。

注意:我只在一个Layout和一个Activity中执行此操作。问题和答案是动态变化的。

此外,我在点击snackbar.dismiss();时从未致电setAction,但是当我点击setAction时,它总是会被忽略,我该如何阻止它被解雇?

非常感谢你的帮助!!!

1 个答案:

答案 0 :(得分:0)

我也面临同样的问题。我解决它的方法是每次需要时创建一个新的。

也许让这个功能改为

Snackbar getSnackbar(Listener clickListener) {
    Return Snackbar.make(coordinatorLayoutView,"Wrong Answer!",
            Snackbar.LENGTH_INDEFINITE).setAction("REVIEW", clickListener);
}

并在每次需要时调用它来显示新的。

getSnackBar(clickListener).show();

我希望能在你的问题上找到更好的答案。如果没有,也许这可以帮到你。

P / S:我相信Action会一直拒绝Snackbar。这是Snackbar的固​​有行为(意味着短暂的生命)。如果您需要在操作后不会解散的内容,则可能需要创建自定义视图。