实际上我正在尝试从Fragment类中调用Snackbar,问题是第一次成功显示快餐栏但是第二次,snackbar.dismis无效 代码:
Snackbar snackbar; View sbView; TextView textView;
private void showSnackBar(Boolean bool) {
snackbar = Snackbar
.make(getView(), getResources().getString(R.string.set_pickup_time), Snackbar.LENGTH_INDEFINITE);
sbView = snackbar.getView();
textView = sbView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.RED);
if (bool)
snackbar.show();
else {
if (snackbar.isShown())
snackbar.dismiss();
}
}
有时候,当我查看NPE
if (snackbar.isShown())
答案 0 :(得分:1)
每次您创建一个新的快餐栏,然后检查它是否显示而没有显示。您必须移动代码,如下所示:
if (bool){
snackbar = Snackbar.make(getView(), getResources().getString(R.string.set_pickup_time), Snackbar.LENGTH_INDEFINITE);
sbView = snackbar.getView();
textView = sbView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.RED);
snackbar.show();
}else if (snackbar!=null && snackbar.isShown())
snackbar.dismiss();
}
答案 1 :(得分:0)
您只需要创建一次快餐栏。
Snackbar snackbar; View sbView; TextView textView;
private void showSnackBar(Boolean bool) {
if(snackbar == null) {
snackbar = Snackbar
.make(getView(), getResources().getString(R.string.set_pickup_time), Snackbar.LENGTH_INDEFINITE);
sbView = snackbar.getView();
textView = sbView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.RED);
}
if (bool)
snackbar.show();
else {
if (snackbar.isShown())
snackbar.dismiss();
}
}