我使用Snackbar
和setAction
创建了一个简单的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
时,它总是会被忽略,我该如何阻止它被解雇?
非常感谢你的帮助!!!
答案 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的固有行为(意味着短暂的生命)。如果您需要在操作后不会解散的内容,则可能需要创建自定义视图。