showDialog déconseillé. Quelle est l’alternative?

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

showDialog(TIME_DIALOG_ID); 

C’est dans ce tutoriel, mais dit déconseillé dans Eclipse.

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

final final void showDialog (int id) Ajouté au niveau 1 de l’API

Cette méthode est obsolète au niveau 13 de l’API. 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. Il suffit d’appeler showDialog (int, Bundle) avec des arguments nuls.

Pourquoi

  • Un fragment qui affiche une fenêtre de dialog, flottant au-dessus de la fenêtre de son activité. Ce fragment contient un object Dialog, qu’il affiche comme approprié en fonction de l’état du fragment. Le contrôle de la boîte de dialog (décider quand afficher, masquer, rejeter) doit être effectué via l’API ici, pas avec les appels directs dans la boîte de dialog.
  • Voici une belle discussion Android DialogFragment vs Dialog
  • Une autre bonne discussion DialogFragment avantages sur AlertDialog

Comment résoudre?

Plus

De l’ Activity#showDialog(int) :

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

Pour afficher la boîte de dialog, vous pouvez utiliser le code suivant. Cela permet d’afficher une boîte AlertDialog simple 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

Considérant que si vous utilisez la fonction showDialog pour afficher une boîte de dialog différente ou n’importe quoi selon les arguments passés, vous pouvez créer une fonction autonome 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 dialog ci-dessus dans la définition de la fonction.

Ce code a fonctionné pour moi. Solution facile mais probablement pas une manière préférée.

 public void onClick (View v) { createdDialog(0).show(); // Instead of showDialog(0); } protected Dialog createdDialog(int id) { // Your code } 
 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 SsortingngBuilder().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