亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的 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();


    }

上面代碼的輸出屏幕截圖如下,

http://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 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號