web-dev-qa-db-fra.com

showDialog obsolète. Quelle est l'alternative?

Y at-il autre chose qui devrait être appelé?

showDialog(TIME_DIALOG_ID);

C'est dans ce tutoriel mais dit obsolète dans Eclipse.

96
Denis

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

public final final showDialog (int id) ajouté à l'API niveau 1

Cette méthode était obsolète dans l'API de niveau 13. Utilisez plutôt la nouvelle classe DialogFragment avec FragmentManager; Ceci est également disponible sur les anciennes plates-formes via le package de compatibilité Android).

Version simple de showDialog (int, Bundle) qui ne prend aucun argument. Appelle simplement showDialog (int, Bundle) avec des arguments nuls.

Pourquoi

  • Un fragment qui affiche une fenêtre de dialogue flottant au-dessus de la fenêtre d'activité. Ce fragment contient un objet Dialog, qu'il affiche comme il convient en fonction de l'état du fragment. Le contrôle de la boîte de dialogue (décider quand afficher, masquer, la fermer) doit être effectué via l'API ici, pas avec des appels directs dans la boîte de dialogue.
  • Voici une belle discussion Android DialogFragment vs Dialog
  • Une autre discussion intéressante Avantages de DialogFragment par rapport à AlertDialog

Comment résoudre?

Plus

89
Md Mahbubur Rahman

De Activity#showDialog(int) :

Cette méthode est obsolète.
Utilisez la nouvelle classe DialogFragment avec FragmentManager ; ceci est également disponible sur les anciennes plates-formes via le package de compatibilité Android).

8
Matt Ball

Pour afficher la boîte de dialogue, vous pouvez utiliser le code suivant. Ceci est pour afficher une simple boîte AlertDialog avec plusieurs cases à cocher:

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

Titre

Par contre, si vous utilisez la fonction showDialog pour afficher une boîte de dialogue différente ou quoi que ce soit en fonction des arguments passés, vous pouvez créer une fonction self et l’appeler sous la fonction onClickListener(). Quelque chose comme:

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

et ajoutez le code de la boîte de dialogue donné ci-dessus dans la définition de la fonction.

5
Khay

Ce code a fonctionné pour moi. Solution facile mais probablement pas un moyen préféré.

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

protected Dialog createdDialog(int id) {
    // Your code
}
3
MishaLee
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 
1
Keshav Gera