为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

江户川乱折腾 2022-06-23 15:47:02
我有一个小吃店,我建立的持续时间设置为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) {                    }               });
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

下面的代码显示了“在”小吃栏显示之后的警报对话框。


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


    }

上面代码的输出屏幕截图如下,

//img1.sycdn.imooc.com//62b41a9e0001778f07191274.jpg

查看完整回答
反对 回复 2022-06-23
?
炎炎设计

TA贡献1808条经验 获得超4个赞

这个问题的答案在于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;

}


查看完整回答
反对 回复 2022-06-23
  • 2 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号