如何关闭 AlertDialog.Builder?
Posted
技术标签:
【中文标题】如何关闭 AlertDialog.Builder?【英文标题】:How to dismiss AlertDialog.Builder? 【发布时间】:2012-07-02 08:51:46 【问题描述】:在下面的代码中,如何关闭警报框?我不想造成内存泄漏。我在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
【问题讨论】:
【参考方案1】:dismiss() 有什么不好的地方?
您应该可以使用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();
);
【讨论】:
AlertDialog.Builder
没有cancel
方法
@xmenW.K. cancel()
是 Dialog 本身的方法,而不是构建器。
是的,但在您的代码中(也有问题)alertDialog
是Builder
。在onClick
中,您应该使用参数中的dialog
。
哦,我现在明白了。谢谢=)
很好的解决方案!转储问题。【参考方案2】:
只需覆盖 create 方法并保存对话框实例。然后你可以调用dismiss
@Override
public AlertDialog create()
this.dialog = super.create();
return this.dialog;
代码的某处:
dialog.dismiss();
【讨论】:
这是唯一适合我的解决方案。我创建了一个从 AlertDialog.Builder 扩展的类。有了它,我可以创建自己的解除方法。【参考方案3】:如果您不想放置任何按钮并且有自定义布局,其中您说 textview 并且您想在单击该 textview 时关闭警报对话框,则必须使用这种方式:
AlertDialog alertDialog = builder.show();
然后检查
if(alertDialog != null && alertDialog.isShowing())
alertDialog.dismiss();
如果您想在检查某些条件后在活动中的其他位置将其关闭,这也是如此。
【讨论】:
完美的最佳答案,有很好的解释 是的,就是这样。为什么他们没有在 Builder 本身中包含 close 方法让我感到震惊……不是每个人都想使用默认按钮。对于自定义 AlertDialog,这是目前唯一的方法。谢谢【参考方案4】:使用以下代码,您可以显示一个 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();
);
【讨论】:
完美!非常感谢! 谢谢!这里的关键是关闭使用 alertDialog.show() 创建的对话框。从构建器创建一个对话框并在该对话框上调用dismiss不会关闭我们在调用show()时创建的同一个对话框。这个让我有点难过 =)【参考方案5】:此方法演示了所需的代码 .. 来自 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();
);
【讨论】:
【参考方案6】:代码很简单:
final AlertDialog show = alertDialog.show();
最后以按钮的动作为例:
show.dismiss();
例如使用自定义警报对话框:
java代码,你可以创建一个Object 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();
);
代码 XML layout_test.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_
android:layout_>
<TextView
android:layout_
android:layout_
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_
android:layout_
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:layout_marginTop="15dp">
<EditText
android:layout_
android:layout_
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_
android:layout_
android:gravity="center_horizontal"
android:paddingTop="10dp"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:paddingBottom="15dp" >
<LinearLayout
android:orientation="horizontal"
android:layout_
android:layout_ >
<LinearLayout
android:orientation="horizontal"
android:layout_
android:layout_
android:weightSum="1.00"
android:gravity="right" >
<Button
android:layout_
android:layout_
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>
最后,调用 Activity:
ViewAlertRating alertRating = new ViewAlertRating(this);
alertRating.showAlert();
【讨论】:
很好的解决方案。帮了我很多! 我正在寻找的东西 :-)【参考方案7】:我试过这个并且成功了!
.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialogInterface, int i)
alertDialog.setCancelable(true);
);
【讨论】:
【参考方案8】:关闭或取消AlertDialog.Builder
dialog.setNegativeButton("إلغاء", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialogInterface, int i)
dialogInterface.dismiss()
);
你必须在对话界面调用dismiss()
。
【讨论】:
【参考方案9】:一个完整的例子:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
View view = getLayoutInflater().inflate(R.layout.dialog_layout,null);
TextView tvcancel = (TextView)view.findViewById(R.id.tvcancel);
TextView tvdisconnect = (TextView)view.findViewById(R.id.tvdisconnect);
builder.setView(view);
final AlertDialog ad = builder.show();
tvdisconnect.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
ad.dismiss();
stop***();
);
tvcancel.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
ad.dismiss();
);
【讨论】:
以上是关于如何关闭 AlertDialog.Builder?的主要内容,如果未能解决你的问题,请参考以下文章
Android实现点击AlertDialog上按钮时不关闭对话框
如何关闭自定义AlertDialog-Android开发问答
android AlertDialog.Builder.setView(v) 点击v里面一个按钮怎么让对话框消失。这个问题你怎么解决的
android 怎么使对话框(AlertDialog.Builder)自动消失