Android 如何关闭 AlertDialog.Builder?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11285235/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 06:43:37  来源:igfitidea点击:

How to dismiss AlertDialog.Builder?

androidmemorydialogalertdismiss

提问by sneaky

In the following code below, how do I dismiss the alert box? I don't want to cause a memory leak. I tried the .dismiss() on alertDialog, but that didn't work... Thanks

在下面的代码中,如何关闭警报框?我不想导致内存泄漏。我在 alertDialog 上尝试了 .dismiss(),但是没有用...谢谢

// User pressed the stop button
public void StopMsg_button_action(View view){
    final EditText password_input = new EditText(this); // create an text input field
    password_input.setHint("Enter Password"); // put a hint in it
    password_input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); // change it to password type

    AlertDialog.Builder alertDialog = new Builder(this); // create an alert box
    alertDialog.setTitle("Enter Password"); // set the title
    alertDialog.setView(password_input);  // insert the password text field in the alert box
    alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { // define the 'OK' button
        public void onClick(DialogInterface dialog, int which) {
             String entered_password = password_input.getText().toString();
             if (entered_password.equals(my_password)) {
                locManager.removeUpdates(locListener); // stop listening for GPS coordinates
                startActivity(new Intent(Emergency_1Activity.this,Main_MenuActivity.class)); // go to main menu
             } else {
                 alert("Incorrect Password");
             }
        } 
    });
    alertDialog.setNeutralButton("Cancel", new DialogInterface.OnClickListener() { // define the 'Cancel' button
        public void onClick(DialogInterface dialog, int which) {

        } 
    });
    alertDialog.show(); // show the alert box
}

回答by FoamyGuy

What didn't work about dismiss()?

什么对解雇()不起作用?

You should be able to use either Dialog.dismiss(), or Dialog.cancel()

您应该能够使用Dialog.dismiss()Dialog.cancel()

alertDialog.setNeutralButton("Cancel", new DialogInterface.OnClickListener() { // define the 'Cancel' button
    public void onClick(DialogInterface dialog, int which) {
        //Either of the following two lines should work.
        dialog.cancel();
        //dialog.dismiss();
    } 
});

回答by GMG

With the following code you can show a ListBox AlertDialog and when you press on a item you dismiss the Dialog. The order of code is importan.

使用以下代码,您可以显示一个 ListBox AlertDialog,当您按下某个项目时,您将关闭该对话框。代码顺序很重要。

AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);

String names[] ={"A","B","C","D"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext,android.R.layout.simple_list_item_1,names);

LayoutInflater inflater = getLayoutInflater();
View convertView = (View)inflater.inflate(R.layout.list_layout, null);
ListView lv = (ListView) convertView.findViewById(R.id.listView1);
lv.setAdapter(adapter);
alertDialog.setView(convertView);
alertDialog.setTitle("List");
final AlertDialog ad = alertDialog.show();

lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id)
    {
        //Toast.makeText(mContext, position, Toast.LENGTH_LONG).show();
        ad.dismiss();
    }
});

回答by Alex Zaraos

The code is very simple:

代码非常简单:

final AlertDialog show = alertDialog.show();

finally in the action of button for example:

最后在按钮的动作中,例如:

show.dismiss();

For example with a custom alertdialog:

例如使用自定义警报对话框:

enter image description here

在此处输入图片说明

Code on java, you could create a Object AlertDialog:

java上的代码,你可以创建一个对象AlertDialog:

public class ViewAlertRating {

    Context context;
    public ViewAlertRating(Context context) {
        this.context = context;
    }

    public void showAlert(){

        AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        View alertView = inflater.inflate(R.layout.layout_test, null);
        alertDialog.setView(alertView);

        final AlertDialog show = alertDialog.show();

        Button alertButton = (Button) alertView.findViewById(R.id.btn_test);
        alertButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                show.dismiss();
            }
        });
    }
}

Code XML layout_test.xml

代码 XML layout_test.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Valoración"
        android:id="@+id/text_test1"
        android:textSize="20sp"
        android:textColor="#ffffffff"
        android:layout_centerHorizontal="true"
        android:gravity="center_horizontal"
        android:textStyle="bold"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:background="#ff37dabb"
        android:paddingLeft="20dp"
        android:paddingRight="20dp" />


    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:layout_marginTop="15dp">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="120dp"
            android:id="@+id/edit_test"
            android:hint="Descripción"
            android:textColor="#aa000000"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:textColorHint="#aa72777a"
            android:gravity="top" />
    </LinearLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_horizontal"
        android:paddingTop="10dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:paddingBottom="15dp" >

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <LinearLayout
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:weightSum="1.00"
                android:gravity="right" >

                <Button
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Enviar"
                    android:id="@+id/btn_test"
                    android:gravity="center_vertical|center_horizontal"
                    android:textColor="#ffffffff"
                    android:background="@drawable/btn_flat_blue_selector" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

finally, call on Activity:

最后,调用 Activity:

ViewAlertRating alertRating = new ViewAlertRating(this);
alertRating.showAlert();

回答by Namrata Bagerwal

You must use this way if you don't want to put any buttons and have custom layout in which you have say textview and you want to dismiss alert dialog upon clicking of that textview:

如果您不想放置任何按钮并具有自定义布局,您在其中说 textview 并且您想在单击该 textview 时关闭警报对话框,则必须使用这种方式:

AlertDialog alertDialog = builder.show();

then check

然后检查

if(alertDialog != null && alertDialog.isShowing()){
      alertDialog.dismiss();
}

This is also true if you want to dismiss it somewhere else in your activity after checking some condition.

如果您想在检查某些条件后在活动的其他地方关闭它,这也是正确的。

回答by Gene Bo

This method demos the code that's needed .. from Namrata's earlier answer

此方法演示了所需的代码 .. 来自 Namrata 的早期答案

@SuppressLint("InflateParams")
private static void showDialog(Activity activity, int layoutId)
{
    LayoutInflater inflater = activity.getLayoutInflater();
    View dialoglayout = inflater.inflate(layoutId, null);

    AlertDialog.Builder builder = new AlertDialog.Builder(activity);
    builder.setView(dialoglayout);

    CustomDialog.doCustomLogic(activity, layoutId, dialoglayout);

    final AlertDialog alertDialog = builder.show();

    // caller assumes there will be a btn_close element present
    Button closeNowBtn = (Button) dialoglayout.findViewById(R.id.btn_close);
    closeNowBtn.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View v)
        {
            alertDialog.dismiss();
        }
    });
}

回答by Elhassan N

To dismiss or cancel AlertDialog.Builder

取消或取消 AlertDialog.Builder

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

You have to call dismiss()on the dialog interface.

您必须dismiss()在对话界面上调用。

回答by vladaman

Just override create method and save the dialog instance. Then you can call dismiss

只需覆盖 create 方法并保存对话框实例。然后你可以调用dismiss

@Override
public AlertDialog create() {
    this.dialog = super.create();
    return this.dialog;
}

Somewhere at the code:

某处代码:

dialog.dismiss();

回答by Marjan Davodinejad

i tried this and worked!

我试过这个并且成功了!

.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
               alertDialog.setCancelable(true);
            }
        });

回答by Martin Revert

Instead of alertDialog.setNeutralButtonjust use alertDialog.setNegativeButton. Use dialog.cancel(), because dialog.dismiss()is not a method available for Alert dialogs.

而不是alertDialog.setNeutralButton仅仅使用alertDialog.setNegativeButton. 使用dialog.cancel(), 因为dialog.dismiss()不是警报对话框可用的方法。