Диалог с проверкой данных перед закрытием

 V*D*V

Решение следующих задач:

Создание диалога ввода данных.

Проверка данных и предотвращение закрытия диалога, если данные некорректны.

 

API Level 10+

 

public class MyActivity extends Activity implements OnClickListener {

 /** Диалог ввода данных */

 private final class InputDialog extends AlertDialog.Builder implements DialogInterface.OnClickListener {

         private OnClickListener mListener = null;

         private InputDialog(Context context, Object[] data) {

                 super( context );

                 ...

                 // чтобы предотвратить закрытие диалога при нажатии на кнопку OK, ставим заглушку

                 // затем после создания диалога подменяем обработчик кнопки

                 setPositiveButton( android.R.string.ok, this )// заглушка

                 .setNegativeButton( android.R.string.cancel, null );

                 final AlertDialog d = create();

                 d.show();

                 d.getButton( AlertDialog.BUTTON_POSITIVE ).setOnClickListener( new OnClickListener() {

                         @Override

                         public void onClick(View v) {

                                 // проверка данных

                                 if( ... ) {

                                         return;// не закрывать диалог, если данные некорректны

                                 }

                                 if( mListener != null ) {

                                         mListener.onClick( v );

                                 }

                                 d.dismiss();

                         }

                 } );

         }

         private final InputDialog setOkListener(OnClickListener listener) {

                 mListener = listener;

                 return this;

         }

         // DialogInterface.OnClickListener

         @Override

         public void onClick(DialogInterface dialog, int which) {// заглушка

         }

 }

 @Override

 public void onClick(View v) {

         switch( v.getId() ) {

         case ...:

                 final Object[] data = new Object[] {};

                 final InputDialog dialog = new InputDialog( this, data );

                 dialog.setOkListener( new OnClickListener() {

 

                         @Override

                         public void onClick(View view) {

                                 // получение данных из диалога

                         }

                 } );

                 break;

         }

 }

}