簡體   English   中英

Android 從導航抽屜中打開 AlertDialog

[英]Android Open AlertDialog from Navigation Drawer

我將NavigationDrawer與菜單中的一些虛擬FragmentsAlertDialog 當我單擊從抽屜中打開AlertDialog ,我可以使用 no 按鈕關閉它,但是當我再次單擊打開它時,它不想關閉它。

然后我必須首先切換到抽屜中的其他片段之一,然后單擊對話框將其打開。

關閉它后如何再次打開它而無需第一次切換到另一個菜單項。

主活動.java

@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {

    switch (menuItem.getItemId()) {
        case R.id.drawer_fragment_one:
            if (!menuItem.isChecked()) {
                selectedIndex = COLLAPSING_TOOLBAR;
                menuItem.setChecked(true);
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new FragmentTabOne(), COLLAPSING_TOOLBAR_FRAGMENT_TAG).commit();
            }
            drawerLayout.closeDrawer(GravityCompat.START);
            return true;

        case R.id.drawer_fragment_two:
            if (!menuItem.isChecked()) {
                selectedIndex = COLLAPSING_TOOLBAR;
                menuItem.setChecked(true);
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new FragmentTabTwo(), COLLAPSING_TOOLBAR_FRAGMENT_TAG).commit();
            }
            drawerLayout.closeDrawer(GravityCompat.START);
            return true;

        case R.id.drawer_alert_dialog:
            if (!menuItem.isChecked()) {
                selectedIndex = ALERT_DIALOG;
                menuItem.setChecked(true);

                final AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
                dialog.setIcon(R.mipmap.ic_launcher);
                dialog.setTitle(R.string.app_name);
                dialog.setMessage(R.string.dialog_msg);
                dialog.setPositiveButton(R.string.dialog_option_yes, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                });

                dialog.setNegativeButton(R.string.dialog_option_no, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.dismiss();
                    }
                });

                dialog.show();

            }
            drawerLayout.closeDrawer(GravityCompat.START);
            return true;

        }
    return false;
}

我認為當您第一次單擊處理您設置為 true 的對話框的項目時,當您嘗試第二次單擊時,您測試是否未選中,返回 false,因此您的對話框未顯示

在下面的代碼片段中:

case R.id.drawer_alert_dialog:
        if (!menuItem.isChecked()) {
            selectedIndex = ALERT_DIALOG;
            menuItem.setChecked(true);

            final AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
            dialog.setIcon(R.mipmap.ic_launcher);
            dialog.setTitle(R.string.app_name);
            dialog.setMessage(R.string.dialog_msg);
            dialog.setPositiveButton(R.string.dialog_option_yes, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {

                }
            });

            dialog.setNegativeButton(R.string.dialog_option_no, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    dialogInterface.dismiss();
                    .... (Add the line here)
                }
            });

            dialog.show();

        }
        drawerLayout.closeDrawer(GravityCompat.START);
        return true;

添加以下行,希望這必須有效:

menuItem.setChecked(false);

在我提到的地方添加它(在此處添加行)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM