为什么我的 Android 快餐栏在单击其操作按钮后会消失?

我有一个小吃店,我建立的持续时间设置为Snackbar.LENGTH_INDEFINITE


当我打电话时,小吃店会正确显示mySnackbar.show();


但是,只要我按下操作按钮,小吃店就会消失。


系统似乎调用了dismiss方法。


有谁知道解决方法?


这是我构建小吃店的代码:


Snackbar mySnackbar = Snackbar.make(mParent, R.string.the_question, Snackbar.LENGTH_INDEFINITE)

                .setAction(R.string.yes, new View.OnClickListener() {

                    @Override

                    public void onClick(View v) {


                        //My code...

                    }

                })

                .addCallback(new Snackbar.Callback() {


                    @Override

                    public void onDismissed(Snackbar snackbar, int event) {

                    }


                    @Override

                    public void onShown(Snackbar snackbar) {

                    }

               });


江户川乱折腾
浏览 168回答 2
2回答

胡说叔叔

下面的代码显示了“在”小吃栏显示之后的警报对话框。 @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),                "This is Snackbar", Snackbar.LENGTH_INDEFINITE).                setAction(R.string.yes, new View.OnClickListener() {                    @Override                    public void onClick(View v) {                    }                }).addCallback(new Snackbar.Callback() {            @Override            public void onDismissed(Snackbar transientBottomBar, int event) {                super.onDismissed(transientBottomBar, event);            }            @Override            public void onShown(Snackbar sb) {                super.onShown(sb);            }        });        snackbar.show();        showAlertDialog(this, "Alert!!", "Alert Dialog", "Yes", "No");    }showAlertDialog 是显示对话框的简单静态方法public static void showAlertDialog(Context context, String title, String message, String posBtnMsg, String negBtnMsg) {        AlertDialog.Builder builder = new AlertDialog.Builder(context);        builder.setTitle(title);        builder.setMessage(message);        builder.setPositiveButton(posBtnMsg, new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                dialog.cancel();            }        });        builder.setNegativeButton(negBtnMsg, new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                dialog.cancel();            }        });        AlertDialog dialog = builder.create();        dialog.show();    }上面代码的输出屏幕截图如下,

炎炎设计

这个问题的答案在于Snackbar.setAction(CharSequence text, final View.OnClickListener listener)实现方式如果您将此方法传递给非空文本或非空侦听器,则显示操作文本的 TextView 将设置一个 OnClickListener,它BaseTransientBottomBar.dispatchDismiss(BaseCallback.DISMISS_EVENT_ACTION)会在执行操作时调用。这会导致 Snackbar 被关闭。为了防止这种情况,需要检索 Snackbar 的操作视图的 TextView,并使用不调用 dispatchDismiss() 的侦听器覆盖其 OnClickListener这是Snackbar.setAction()供参考的代码public Snackbar setAction(CharSequence text, final View.OnClickListener listener) {        final SnackbarContentLayout contentLayout = (SnackbarContentLayout) mView.getChildAt(0);        final TextView tv = contentLayout.getActionView();        if (TextUtils.isEmpty(text) || listener == null) {            tv.setVisibility(View.GONE);            tv.setOnClickListener(null);        } else {            tv.setVisibility(View.VISIBLE);            tv.setText(text);            tv.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    listener.onClick(view);                    // Now dismiss the Snackbar                    dispatchDismiss(BaseCallback.DISMISS_EVENT_ACTION);                }            });        }        return this;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java