Android snackbar.show()在setAction中不起作用

Android snackbar.show()在setAction中不起作用,android,material-design,android-snackbar,Android,Material Design,Android Snackbar,在重试操作的OnClick上,我想再次显示相同的Snackbar。但它不起作用 您必须编写snackbar.show()在onClick之外,如下所示 snackbar = Snackbar.make(getWindow().getDecorView().getRootView(),"Please check your internet connection", Snackbar.LENGTH_INDEFINITE) .setAction("RETRY", new Vie

在重试操作的
OnClick
上,我想再次显示相同的Snackbar。但它不起作用

您必须编写
snackbar.show()
onClick
之外,如下所示

snackbar = Snackbar.make(getWindow().getDecorView().getRootView(),"Please check your internet connection", Snackbar.LENGTH_INDEFINITE)
            .setAction("RETRY", new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                   snackbar.show();
                }
            });

据我所知,你不能在snackbar中用动作重现snackbar。下面是一个使用按钮弹出snackbar的示例。希望能有帮助


有一个错误报告。请看一看。因此,在bug修复程序发布之前,您必须显示另一个snackbar。所以总共你必须有两个斯那巴。下面给出了一个例子

 public static boolean isNetworkAvailable(final Context context) {
        final ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
        return connectivityManager.getActiveNetworkInfo() != null && connectivityManager.getActiveNetworkInfo().isConnected();
    }

void ShowSnackBar(){


        Snackbar snackbar = Snackbar
                .make(coordinatorLayout,"Check internet connection", Snackbar.LENGTH_LONG)
                .setAction("Retry", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {

                        // Write Retry Code like making  api call here 

                    //    apiCall();



                    }
                });

 snackbar.show();      
}

if(!isNetworkAvailable()){
 ShowSnackBar();
}

试试这个,如果还有问题请告诉我

你认为它将如何工作/如何在单击“重试”后再次显示相同的snackbar??第一次如何显示?我将在不同的功能中显示它。我全局声明了snackbar。单击“重试”按钮时会发生什么情况?我正在执行网络签入onClick功能,如果没有网络,我想显示相同的snackbaragain@VenkateswaranBalasubramanian,在
RETRY
中,您必须添加一些函数来检查连接,如果没有连接,该函数将检查连接。在该函数检查网络中使用相同的代码来显示snackbar。他可能需要此代码。如果您认为您更好地理解了它,您可以发布您的。可能他想重新显示snackbar我知道@droidvyes他想显示又是snackbar,但是它是在代码中写的吗?谢谢你,它现在工作了。我用了这个。public void onClick(View-View){if(isNetworkAvailable){/}else{ShowSnackBar();}}}@VenkateswaranBalasubramanian请投票表决为正,以向人们表明我正确无误我在单独的函数中只使用了一个Snackbar。从任何地方调用该函数。现在工作正常了。哦,太好了。任何关于如何报告错误的信息。
private void showFirstSnackbar(View view)

        final Snackbar snackbar = Snackbar.make(view, "Please check your internet connection", Snackbar.LENGTH_INDEFINITE);
        snackbar.setAction("RETRY", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        snackbar.dismiss();
                        showAnotherSnackBar(view);
                    }
                });
}


private void  showAnotherSnackBar(View view){
    final Snackbar snackbar = Snackbar.make(view, "Please check your internet connection", Snackbar.LENGTH_INDEFINITE);
        snackbar.setAction("RETRY", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        snackbar.dismiss();
                        showFirstSnackbar(view);
                    }
                });
}
 public static boolean isNetworkAvailable(final Context context) {
        final ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
        return connectivityManager.getActiveNetworkInfo() != null && connectivityManager.getActiveNetworkInfo().isConnected();
    }

void ShowSnackBar(){


        Snackbar snackbar = Snackbar
                .make(coordinatorLayout,"Check internet connection", Snackbar.LENGTH_LONG)
                .setAction("Retry", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {

                        // Write Retry Code like making  api call here 

                    //    apiCall();



                    }
                });

 snackbar.show();      
}

if(!isNetworkAvailable()){
 ShowSnackBar();
}
private void showFirstSnackbar(View view)

        final Snackbar snackbar = Snackbar.make(view, "Please check your internet connection", Snackbar.LENGTH_INDEFINITE);
        snackbar.setAction("RETRY", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        snackbar.dismiss();
                        showAnotherSnackBar(view);
                    }
                });
}


private void  showAnotherSnackBar(View view){
    final Snackbar snackbar = Snackbar.make(view, "Please check your internet connection", Snackbar.LENGTH_INDEFINITE);
        snackbar.setAction("RETRY", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        snackbar.dismiss();
                        showFirstSnackbar(view);
                    }
                });
}
void ShowSnackBar(){
        Snackbar snackbar = Snackbar
                .make(coordinatorLayout,"Check internet connection", Snackbar.LENGTH_LONG)
                .setAction("Retry", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {

                       if(isNetworkAvailable){
                           ///called api
                         }else{
                            ShowSnackBar();
                          }
                    }
                });

 snackbar.show();      
}
if(!isNetworkAvailable()){
 ShowSnackBar();
}