Как сохранить alertdialog открытым после нажатия кнопки onclick?

Тема kinda говорит все это. Я запрашиваю у пользователя PIN-код, если они его вводят, нажмите кнопку OK Positive и неверный PIN-код. Я хочу отобразить Toast, но не открывайте диалог. В настоящий момент он автоматически закрывается. Конечно, это очень тривиально, но мы не можем найти ответ.

Благодаря..

Создайте настраиваемый диалог с помощью EditText с атрибутом android: password = «true» a, затем вручную установите onClick listener кнопку и явно выберите, что делать в ней.

       

Затем, когда вы хотите, чтобы он всплывал:

 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(); 

Вам не нужно создавать пользовательский class. Вы можете зарегистрировать View.OnClickListener для AlertDialog. Этот слушатель не отклонит AlertDialog. Трюк здесь заключается в том, что вам нужно зарегистрировать слушателя после того, как было показано диалоговое окно, но его можно аккуратно выполнить внутри OnShowListener. Вы можете использовать вспомогательную логическую переменную, чтобы проверить, было ли это уже сделано, чтобы она выполнялась только один раз:

  /* * 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; } } }); 

Часть этого решения была предоставлена 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(); } } }); } } 

Вы можете просто продолжить диалог, который у вас уже есть, просто поместите предложение if в onClick (), говорящее

 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 (“”); и помещаем в текст, который вы хотите здесь, общая ошибка заключается в том, что при вводе:

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

вы пропустите, что нужно на самом деле

 dialog.findViewById 

и это независимо от того, что имя диалогового windows, в моем примере это просто одноименное имя.

     

Такая же проблема для меня в FragmentDialog. Вот мое критическое / элегантное решение: удалите все кнопки из диалога (положительные, отрицательные, нейтральные). Добавьте свои кнопки из xml.eg .:

     

И тогда в вашем коде обрабатывайте его с помощью:

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

где view – вид, назначенный диалоговому окну!

Попробуй это:

 final AlertDialog alertDialog = new AlertDialog.Builder(context) .setView(v) .setTitle(R.string.my_title) .setPositiveButton(android.R.string.ok, null) //Set to null. We override the onclick .setNegativeButton(android.R.string.cancel, null) .create(); alertDialog.setOnShowListener(new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { Button b = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // TODO Do something } }); } }); alertDialog.show(); 

Источник: запрет закрытия Alertdialog после нажатия кнопки


Надеюсь это поможет! Удачи!

  • java.util.zip.ZipException: дубликат записи
  • получение нулевого идентификатора устройства при регистрации до gcm
  • Как добавить кнопку динамически в Android?
  • стиль андроида в коде
  • заполняя круг постепенно снизу вверх.
  • Извлечение текста извещных, contentView или contentIntent
  • Динамическое изменение fragmentов внутри узла вкладки fragmentов?
  • Ошибка установки: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?
  • Использование Retrofit в Android
  • Android, ListView IllegalStateException: «Содержимое адаптера изменилось, но ListView не получил уведомление»
  • Как загрузить видеофайл на SD-карту?
  • Давайте будем гением компьютера.