showDialog veraltet. Was ist die Alternative?

99

Gibt es noch etwas, das genannt werden sollte?

showDialog(TIME_DIALOG_ID);

Es ist in diesem Tutorial , sagt aber in Eclipse veraltet .

Denis
quelle

Antworten:

90

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

public final void showDialog (int id) In API-Ebene 1 hinzugefügt

Diese Methode wurde in API-Ebene 13 nicht mehr unterstützt. Verwenden Sie stattdessen die neue DialogFragment-Klasse mit FragmentManager. Dies ist auch auf älteren Plattformen über das Android-Kompatibilitätspaket verfügbar.

Einfache Version von showDialog (int, Bundle), die keine Argumente akzeptiert. Ruft einfach showDialog (int, Bundle) mit Nullargumenten auf.

Warum

  • Ein Fragment, das ein Dialogfenster anzeigt, das über dem Fenster seiner Aktivität schwebt. Dieses Fragment enthält ein Dialogobjekt, das je nach Status des Fragments entsprechend angezeigt wird. Die Steuerung des Dialogfelds (die Entscheidung, wann es angezeigt, ausgeblendet oder geschlossen werden soll) sollte hier über die API erfolgen, nicht über direkte Aufrufe des Dialogfelds.
  • Hier ist eine nette Diskussion Android DialogFragment vs Dialog
  • Eine weitere nette Diskussion DialogFragment Vorteile gegenüber AlertDialog

Wie löst man?

Mehr

Md Mahbubur Rahman
quelle
8

Von Activity#showDialog(int):

Diese Methode ist veraltet.
Verwenden Sie stattdessen die neue DialogFragmentKlasse mit FragmentManager; Dies ist auch auf älteren Plattformen über das Android-Kompatibilitätspaket verfügbar.

Matt Ball
quelle
132
Anstatt eine einfache Funktion aufzurufen, müssen Sie eine weitere benutzerdefinierte Klasse implementieren? Seufzer
Cerin
4
Veraltet ist nicht dasselbe wie weg. Wenn eine veraltete Funktion immer noch funktioniert und auf den älteren Plattformen, die ich unterstützen möchte, keine Alternative verfügbar ist, verwende ich sie trotzdem.
Edward Falk
@ Edward Ich denke, dass es eine Alternative für die älteren Plattformen gibt, überprüfen Sie hier: developer.android.com/reference/android/support/v4/app/…
Rui Posse
6

Zum Anzeigen des Dialogfelds können Sie den folgenden Code verwenden. Hiermit wird ein einfaches AlertDialogfeld mit mehreren Kontrollkästchen angezeigt:

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

Überschrift

Wenn Sie die showDialog-Funktion verwenden, um ein anderes Dialogfeld oder etwas anderes gemäß den übergebenen Argumenten anzuzeigen, können Sie eine Selbstfunktion erstellen und diese unter der onClickListener()Funktion aufrufen . Etwas wie:

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

und fügen Sie den oben in der Funktionsdefinition angegebenen Code des Dialogfelds hinzu.

Khay
quelle
3

Dieser Code hat bei mir funktioniert. Einfache Lösung, aber wahrscheinlich kein bevorzugter Weg.

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

protected Dialog createdDialog(int id) {
    // Your code
}
MischaLee
quelle
aber wie implementiert man den LIstener auf dieser Methode? Sagen wir für den Datums-
Uhrzeitdialog
Android erledigt dies für Sie, wenn Sie das onClick-Attribut in XML definieren.
MishaLee
1
@gumuruh Android erledigt Listener für Sie, wenn Sie das onClick-Attribut in XML wie folgt definieren: android: onClick = "onClick" und dann die oben beschriebene Methode in Java. Wenn Sie einen benutzerdefinierten Listener benötigen, müssen Sie selbst einen definieren. Weitere Details sind in dieser Frage Link
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
quelle