showDialog obsoleto. Cual es la alternativa?

Respuestas:

90

De http://developer.android.com/reference/android/app/Activity.html

public final void showDialog (int id) Agregado en API nivel 1

Este método quedó obsoleto en el nivel de API 13. En su lugar, utilice la nueva clase DialogFragment con FragmentManager; esto también está disponible en plataformas más antiguas a través del paquete de compatibilidad de Android.

Versión simple de showDialog (int, Bundle) que no acepta argumentos. Simplemente llama a showDialog (int, Bundle) con argumentos nulos.

Por qué

  • Un fragmento que muestra una ventana de diálogo, flotando sobre la ventana de su actividad. Este fragmento contiene un objeto Dialog, que se muestra según corresponda según el estado del fragmento. El control del cuadro de diálogo (decidir cuándo mostrarlo, ocultarlo o descartarlo) debe realizarse a través de la API aquí, no con llamadas directas al cuadro de diálogo.
  • Aquí hay una buena discusión Android DialogFragment vs Dialog
  • Otra buena discusión sobre las ventajas de DialogFragment sobre AlertDialog

¿Cómo resolver?

Más

Md Mahbubur Rahman
fuente
8

De Activity#showDialog(int):

Este método está en desuso.
Utilice la nueva DialogFragmentclase con en su FragmentManagerlugar; esto también está disponible en plataformas más antiguas a través del paquete de compatibilidad de Android.

Matt Ball
fuente
132
Entonces, en lugar de llamar a una función simple, ¿tiene que implementar otra clase personalizada? suspiro
Cerin
4
Desaprobado no es lo mismo que desaparecido. Si una función obsoleta todavía funciona y una alternativa no está disponible en las plataformas más antiguas que quiero admitir, sigo adelante y la uso de todos modos.
Edward Falk
@Edward Creo que hay una alternativa para las plataformas más antiguas, consulte aquí: developer.android.com/reference/android/support/v4/app/…
Rui Posse
6

Para mostrar el cuadro de diálogo, puede utilizar el siguiente código. Esto es para mostrar un cuadro de diálogo de alerta simple con varias casillas de verificación:

AlertDialog.Builder alertDialog= new AlertDialog.Builder(MainActivity.this); .
            alertDialog.setTitle("this is a dialog box ");
            alertDialog.setPositiveButton("ok", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getBaseContext(),"ok ive wrote this 'ok' here" ,Toast.LENGTH_SHORT).show();

                }
            });
            alertDialog.setNegativeButton("cancel", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                        Toast.makeText(getBaseContext(), "cancel ' comment same as ok'", Toast.LENGTH_SHORT).show();


                }
            });
            alertDialog.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getBaseContext(), items[which] +(isChecked?"clicked'again i've wrrten this click'":"unchecked"),Toast.LENGTH_SHORT).show();

                }
            });
            alertDialog.show();

Bóveda

Mientras que si está utilizando la función showDialog para mostrar un cuadro de diálogo diferente o cualquier cosa según los argumentos pasados, puede crear una función propia y puede llamarla bajo la onClickListener()función. Algo como:

 public CharSequence[] items={"google","Apple","Kaye"};
public boolean[] checkedItems=new boolean[items.length];
Button bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bt=(Button) findViewById(R.id.bt);
    bt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            display(0);             
        }       
    });
}

y agregue el código del cuadro de diálogo dado arriba en la definición de la función.

Khay
fuente
3

Este código funcionó para mí. Solución fácil, pero probablemente no sea la forma preferida.

public void onClick (View v) {
    createdDialog(0).show(); // Instead of showDialog(0);
}

protected Dialog createdDialog(int id) {
    // Your code
}
MishaLee
fuente
pero ¿cómo se implementa el LIstener en ese método? Digamos para el cuadro de diálogo Fecha y hora ... @MishaLee
gumuruh
Android lo hace por usted cuando define el atributo onClick en xml.
MishaLee
1
@gumuruh Android hace Listener por usted cuando define el atributo onClick en xml como este: android: onClick = "onClick" y luego el método anterior en Java. Si necesita un oyente personalizado, debe definir uno usted mismo. Más detalles están en este enlace de
MishaLee
1
package com.keshav.datePicker_With_Hide_Future_Past_Date;

import android.app.DatePickerDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity {

    EditText ed_date;
    int year;
    int month;
    int day;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ed_date=(EditText) findViewById(R.id.et_date);

        ed_date.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Calendar mcurrentDate=Calendar.getInstance();
                year=mcurrentDate.get(Calendar.YEAR);
                month=mcurrentDate.get(Calendar.MONTH);
                day=mcurrentDate.get(Calendar.DAY_OF_MONTH);

                final DatePickerDialog   mDatePicker =new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener()
                {
                    @Override
                    public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday)
                    {
                              ed_date.setText(new StringBuilder().append(year).append("-").append(month+1).append("-").append(day));
                            int month_k=selectedmonth+1;

                    }
                },year, month, day);
                mDatePicker.setTitle("Please select date");
                // TODO Hide Future Date Here
                mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis());

                // TODO Hide Past Date Here
                //  mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis());
                mDatePicker.show();
            }
        });
    }
}


// Its Working 
Keshav Gera
fuente