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

时间:2017-01-16 05:47:00

标签: android material-design android-snackbar

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

重试操作的OnClick上我想再次显示相同的Snackbar.But它无法正常工作!!

6 个答案:

答案 0 :(得分:2)

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

Snackbar snackbar = Snackbar
    .make(coordinatorLayout, "No internet connection!", Snackbar.LENGTH_LONG)
    .setAction("RETRY", new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        }
    });


View sbView = snackbar.getView();
TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.YELLOW);
snackbar.show();

答案 1 :(得分:1)

    private void updateQuestion(int currentQuestion) {
    // Update Questions
    String questionString = "Q" + currentQuestion;
    TextView textView = (TextView)findViewById(R.id.QuestionLabel);
    textView.setText(getString(getResources().getIdentifier(questionString, "string", this.getPackageName())));

    // Update Answers
    String answerString;
    RadioGroup radioGroup = (RadioGroup)findViewById(R.id.rgQuestions);
    for (int i = 0; i < radioGroup .getChildCount(); i++)
    {
        answerString = questionString + "A" + i;
        ((RadioButton) radioGroup.getChildAt(i)).setText(getString(getResources().
                getIdentifier(answerString, "string", this.getPackageName())));
    }
}

答案 2 :(得分:0)

据我所知,你不能在小吃店里重新设置一个小吃吧。下面是一个使用按钮弹出小吃店的例子。希望它有所帮助。

MainActivity.java

activity_main.xml

Gradle.app

答案 3 :(得分:0)

有关于此的报告错误。请看here。所以在bug修复发布之前你必须展示另一个小吃吧。总共你必须有两个snacbars。示例如下:

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);
                    }
                });
}

尝试这个并告诉我是否还有问题

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

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