showDialog tidak digunakan lagi. Apa alternatifnya?

99

Apakah ada hal lain yang harus dipanggil?

showDialog(TIME_DIALOG_ID);

Ada dalam tutorial ini tetapi mengatakan usang di Eclipse.

Denis
sumber

Jawaban:

90

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

public final void showDialog (int id) Ditambahkan dalam API level 1

Metode ini tidak digunakan lagi di API level 13. Gunakan kelas DialogFragment baru dengan FragmentManager sebagai gantinya; ini juga tersedia di platform lama melalui paket kompatibilitas Android.

Versi sederhana showDialog (int, Bundle) yang tidak membutuhkan argumen apa pun. Cukup panggil showDialog (int, Bundle) dengan argumen null.

Mengapa

  • Fragmen yang menampilkan jendela dialog, mengambang di atas jendela aktivitasnya. Fragmen ini berisi objek Dialog, yang ditampilkan sebagaimana mestinya berdasarkan status fragmen. Kontrol dialog (memutuskan kapan akan menampilkan, menyembunyikan, menutupnya) harus dilakukan melalui API di sini, bukan dengan panggilan langsung pada dialog.
  • Berikut ini adalah diskusi bagus Android DialogFragment vs Dialog
  • Diskusi bagus lainnya, DialogFragment, memiliki keunggulan dibandingkan AlertDialog

Bagaimana menyelesaikan?

Lebih

Md Mahbubur Rahman
sumber
8

Dari Activity#showDialog(int):

Metode ini tidak digunakan lagi.
Gunakan DialogFragmentkelas baru dengan FragmentManager; ini juga tersedia di platform lama melalui paket kompatibilitas Android.

Matt Ball
sumber
132
Jadi, alih-alih memanggil fungsi sederhana, Anda harus mengimplementasikan kelas khusus lainnya? menghela napas
Cerin
4
Tidak digunakan lagi bukanlah hal yang sama dengan pergi. Jika fungsi yang tidak digunakan lagi masih berfungsi, dan alternatif tidak tersedia di platform lama yang ingin saya dukung, saya tetap menggunakannya.
Edward Falk
@Edward Saya pikir ada alternatif untuk platform lama, periksa di sini: developer.android.com/reference/android/support/v4/app/…
Rui Posse
6

Untuk menampilkan kotak dialog, Anda dapat menggunakan kode berikut. Ini untuk menampilkan kotak AlertDialog sederhana dengan beberapa kotak centang:

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

Judul

Sedangkan jika Anda menggunakan fungsi showDialog untuk menampilkan kotak dialog yang berbeda atau apapun sesuai dengan argumen yang diteruskan, Anda dapat membuat fungsi sendiri dan dapat memanggilnya di bawah onClickListener()fungsi. Sesuatu seperti:

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

dan tambahkan kode kotak dialog yang diberikan di atas dalam definisi fungsi.

Khay
sumber
3

Kode ini berhasil untuk saya. Perbaikan mudah tapi mungkin bukan cara yang disukai.

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

protected Dialog createdDialog(int id) {
    // Your code
}
MishaLee
sumber
tetapi bagaimana mengimplementasikan LIstener pada metode itu? Katakanlah untuk dialog Tanggal & Waktu .... @MishaLee
gumuruh
Android melakukannya untuk Anda saat Anda menentukan atribut onClick di xml.
MishaLee
1
@gumuruh Android melakukan Listener untuk Anda saat Anda menentukan atribut onClick dalam xml seperti ini: android: onClick = "onClick" dan kemudian metode di atas di Java. Jika Anda memerlukan Pendengar khusus, Anda harus menentukannya sendiri. Rincian lebih lanjut ada di tautan
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
sumber