snackbar.dismis不起作用

时间:2017-10-10 08:04:25

标签: android android-fragments

实际上我正在尝试从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())

2 个答案:

答案 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();
}
}