buttononclick后如何保持alertdialog打开?

主题有点说这一切..我要求从用户的PIN码,如果他们input,点击确定正button和PIN不正确我想显示一个敬酒,但保持对话框打开。 目前它自动closures..当然,这是非常微不足道的事情来纠正,但无法find答案呢。

谢谢..

Solutions Collecting From Web of "buttononclick后如何保持alertdialog打开?"

使用属性为android:password =“true”的EditText构build一个自定义对话框,然后手动设置onClick监听器的button,并明确地select要在其中执行的操作。

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:minWidth="180dip" android:digits="1234567890" android:maxLength="4" android:password="true"/> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/Accept" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Accept"/> </LinearLayout> </LinearLayout> 

然后当你想要popup:

 final Dialog dialog = new Dialog(RealizarPago.this); dialog.setContentView(R.layout.custom_dialog); dialog.setTitle("PIN number:"); dialog.setCancelable(true); Button button = (Button) dialog.findViewById(R.id.Accept); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(password_wrong){ // showToast } else{ dialog.dismiss(); // other stuff to do } } }); dialog.show(); 

您不需要创build自定义类。 您可以为AlertDialog注册一个View.OnClickListener。 这个监听器不会closuresAlertDialog。 这里的技巧是你需要在显示对话框后注册监听器,但是它可以在OnShowListener中完成。 您可以使用一个附件布尔variables来检查是否已经完成,以便它只会被执行一次:

  /* * Prepare the alert with a Builder. */ AlertDialog.Builder b = new AlertDialog.Builder(this); b.setNegativeButton("Button", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) {} }); this.alert = b.create(); /* * Add an OnShowListener to change the OnClickListener on the * first time the alert is shown. Calling getButton() before * the alert is shown will return null. Then use a regular * View.OnClickListener for the button, which will not * dismiss the AlertDialog after it has been called. */ this.alertReady = false; alert.setOnShowListener(new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { if (alertReady == false) { Button button = alert.getButton(DialogInterface.BUTTON_NEGATIVE); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //do something } }); alertReady = true; } } }); 

部分解决scheme由http://groups.google.com/group/android-developers/browse_thread/thread/fb56c8721b850124#

您可以如下设置OnClickListener以保持对话框打开:

 public class MyDialog extends AlertDialog { public MyDialog(Context context) { super(context); setMessage("Hello"); setButton(AlertDialog.BUTTON_POSITIVE, "Ok", (new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // this will never be called } }); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (ok) { // do something dismiss(); } else { Toast.makeText(getContext(), "when you see this message, the dialog should stay open", Toast.LENGTH_SHORT).show(); } } }); } } 

你可以继续使用你已经有的对话框,只要在onClick()中join一个if子句即可

 if(pin_check_method){ //pin_check_method should be a boolean returned method //close the Dialog, then continue } else{ //dont put the dialog.dismiss() in here, put instead Toast.makeText(getApplicationContext(),"Invalid pin, please try again",Toast.LENGTH_LONG).show(); } 

现在,要使用这个代码,只需调用text.setText(“”); 并把你想要的文本放在这里常见的错误是,当你input:

 TextView text = (TextView) findViewById(R.id.dialog); 

你错过了它实际上需要的

 dialog.findViewById 

这是不pipe对话的名字是什么,在我的例子中,它恰好是相同的名字。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_root" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/text" android:layout_height="wrap_content" android:textColor="#FFF" android:layout_centerHorizontal="true" android:layout_width="wrap_content"/> <Button android:text="Continue" android:id="@+id/Button01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/text"> </Button> </RelativeLayout> 

对于我在FragmentDialog中同样的问题。 这是我的犯罪/优雅的解决scheme:删除对话框中的所有button(正面,负面,中立)。 从xml.eg添加button:

 <LinearLayout android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="wrap_content"> <Button android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:id="@+id/button_cancel" style="@style/Widget.AppCompat.Button.Borderless.Colored" android:text="@android:string/cancel" android:layout_gravity="left" /> <Button android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:id="@+id/button_ok" style="@style/Widget.AppCompat.Button.Borderless.Colored" android:text="@android:string/ok" android:layout_gravity="right" /> </LinearLayout> 

然后在你的代码中处理它:

 view.findViewById(R.id.button_ok).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view2) { if (wannaClose) dismiss(); else //do stuff without closing! } }); 

其中视图是分配给对话框的视图!