0 votos
Hola otra vez;

como la pregunta dice...  Tengo un dialog que para resumir quiero que se cierre solo cuando la operacion que hago en el sea valida

ejemplo:  un alertDialog con un Edittext que se cierre solo cuando el usuario escriba algo sobre el...

He probado varias funciones (abajo el link) como setCancelable(boolean) para evitar el cierre pero no tengo solucion...

http://developer.android.com/intl/es/reference/android/app/AlertDialog.Builder.html

PDA:

hice un metodo "casero" pero la verdad no evita el cierre, sino que la vuelve a abrir y es molesto el pestañeo que hace.
preguntado por PabloMorales Abr 26, 2015 en Android
editado por PabloMorales Abr 26, 2015

3 Respuestas

0 votos
Mejor respuesta

Hola una vez mas para este tema:

Encontre la solucion, con este fragmento de código evito el cierre al presionar los buttons que genera el "AlertDialog"

final AlertDialog d = 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();
        d.setCanceledOnTouchOutside(false);
        setCancelable(false);
d.setOnShowListener(new DialogInterface.OnShowListener() { 
    @Override
    public void onShow(DialogInterface dialog) { 
        Button b = d.getButton(AlertDialog.BUTTON_POSITIVE); 
        b.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View view) {
                // TODO Do something //Dismiss once everything is OK.                 d.dismiss(); 
                } 
        }); 
    } 
});

y de esta forma se puede condicionar el onClick del "BUTTON_POSITIVE" para revisar lo que uno ingrese, osea justo lo que yo queria...

y ademas se agrega: "d.setCanceledOnTouchOutside(false)" para evitar que se cierre al presionar fuera del alertDialog
y tambien "setCancelable(false)" para evitar que se cierre al intentar volver atras (no es parte del objeto dialog)

respondido por PabloMorales May 4, 2015
seleccionada por PabloMorales May 5, 2015
0 votos

Con setCacelable() deberías de conseguir lo que necesitas. Por ejemplo:

AlertDialog.Builder miAlertDialog = new AlertDialog.Builder(context);

miAlertDialog.setCancelable(false);

 

respondido por Ramon [Admin] Abr 26, 2015
PERO dondo lo ubico??

porque ya lo probe en varias posiciones y no esta funcionando??

dentro de los possitive y negative no me funcionaron y afuera de ellos tampoco

Antes de hacer el create():

 miAlertDialog.create()

Si lo haces después no funciona.

Claro...  pero no esta funcionando el tema del setCancelable()
Pégame el código para poder ver que es lo que puede ocurrir, pues es raro.
y...  ves el problema??

como dije...  asi es como esta ahora ya que al colocar el setCancelable(); no funcionaba
0 votos

ACTIVIDAD QUE LLAMA AL ALERTDIALOG

public class Registro2 extends FragmentActivity{
    
    private FragmentManager fm2 = getSupportFragmentManager();
    private  Registro_p1 registro_p1 = new Registro_p1();
 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.registro2);
        tvRepresentante = (TextView) findViewById(R.id.tv_representative_r2);
        registro_p1.show(fm2, "registro_p1");
    }

ALERT DIALGO

public class Registro_p1 extends DialogFragment {
    public Registro_p1() {}
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
        final   View view = getActivity().getLayoutInflater().inflate(R.layout.registro_p1, null);

        final TextView run = (TextView) view.findViewById(R.id.run);
        final TextView name= (TextView) view.findViewById(R.id.name);
        final TextView last_name = (TextView) view.findViewById(R.id.last_name);

        run.setText(((Registro2) getActivity()).getRun());
        name.setText(((Registro2) getActivity()).getName());
        last_name.setText(((Registro2) getActivity()).getLast_name());

        alertDialogBuilder.setView(view);
        alertDialogBuilder.setTitle("Registro 1 de 5");
        alertDialogBuilder.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                ((Registro2) getActivity()).close();
                dialog.cancel();
            }
        });
        alertDialogBuilder.setPositiveButton("Continuar", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                boolean estado;
                String runS = run.getText().toString();
                String nameS = name.getText().toString();
                String last_nameS = last_name.getText().toString();
                estado=control(runS,nameS,last_nameS, view.getContext());
                ((Registro2) getActivity()).actualizar1de5(runS, nameS, last_nameS, estado);
            }
        });
        return alertDialogBuilder.create();
    }

Asi es como esta ahora ya que no me funcionaba el setCancelable();

respondido por PabloMorales Abr 28, 2015
Tienes bien el código. Primero añade el setCancelable(). Luego hay que evitar mezclar bibliotecas de "android.support.v4.app" (ésta biblioteca es antigua y no implementa todo lo de las nuevas) con las de "android.app" (pues posiblemente sea un problema de incompatibilidad entre ellas), es mejor que pases todo a la nueva biblioteca "android.app".
gracias....   voy a realizar los cambios y te comento
Hola, otra vez

El problema persiste, corregí las librerias, ahora solo usa "android.app"(la libreria "v4" la solicita para el fragment).

¿el setCancelable tiene que ir en false o true? ya que pruebo los dos pero como igual se oculta, no se cual es el correcto

Para recordar lo que deseo que ocurra, en resumen, Cuando presione "setPositiveButton" o "setNegativeButton" no se cierre hasta que yo lo decida
hola, estaba revisando y el "setCancelable" no me sirve para lo que quiero. La funcion solo es para evitar que el usuario retroceda al estar el dialogo activo...

no evita que se oculte cuando presiono "setPositiveButton" o "setNegativeButton"

En este caso tienes alguna recomendacion para realizar algo similar a los alertDialog??