showDialog kullanımdan kaldırıldı. Alternatif nedir?


99

Aranması gereken başka bir şey var mı?

showDialog(TIME_DIALOG_ID);

Bu öyle Bu eğitimde ama diyor kaldırılmış Eclipse.

Yanıtlar:


91

Gönderen http://developer.android.com/reference/android/app/Activity.html

public final void showDialog (int id) API seviyesi 1'e eklendi

Bu yöntem API düzeyi 13'te kullanımdan kaldırılmıştır. Bunun yerine FragmentManager ile yeni DialogFragment sınıfını kullanın; bu, Android uyumluluk paketi aracılığıyla eski platformlarda da mevcuttur.

Herhangi bir argüman almayan basit showDialog (int, Bundle) versiyonu. Basitçe showDialog'u (int, Bundle) boş argümanlarla çağırır.

Neden

  • Etkinlik penceresinin üzerinde yüzen bir iletişim penceresi görüntüleyen bir parça. Bu parça, parçanın durumuna göre uygun şekilde görüntülediği bir Dialog nesnesi içerir. İletişim kutusunun kontrolü (ne zaman gösterileceğine, gizleneceğine, kapatılacağına karar verme), iletişim kutusundaki doğrudan aramalarla değil, burada API aracılığıyla yapılmalıdır.
  • İşte güzel bir tartışma Android DialogFragment vs Dialog
  • Bir başka güzel tartışma DialogFragment'in AlertDialog'a göre avantajları

Nasıl çözülür?

Daha


8

Kimden Activity#showDialog(int):

Bu yöntem kullanımdan kaldırılmıştır. Bunun yerine
yeni DialogFragmentsınıfı FragmentManagerkullanın; bu, Android uyumluluk paketi aracılığıyla eski platformlarda da mevcuttur.


134
Yani basit bir işlevi çağırmak yerine, başka bir özel sınıf mı uygulamanız gerekiyor? sigh
Cerin

4
Kullanımdan kaldırılan, gitmiş olanla aynı şey değildir. Kullanımdan kaldırılmış bir işlev hala çalışıyorsa ve desteklemek istediğim eski platformlarda bir alternatif mevcut değilse, devam ediyorum ve yine de kullanıyorum.
Edward Falk

@Edward Eski platformlar için bir alternatif olduğunu düşünüyorum, burayı kontrol edin: developer.android.com/reference/android/support/v4/app/…
Rui Posse

6

İletişim kutusunu görüntülemek için aşağıdaki kodu kullanabilirsiniz. Bu, birden çok onay kutusu içeren basit bir AlertDialog kutusu görüntülemek içindir:

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

Başlık

Oysa, farklı iletişim kutusunu veya iletilen argümanlara göre herhangi bir şeyi görüntülemek için showDialog işlevini kullanıyorsanız, bir self işlevi oluşturabilir ve onu onClickListener()işlev altında çağırabilirsiniz . Gibi bir şey:

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

ve yukarıda verilen iletişim kutusunun kodunu fonksiyon tanımına ekleyin.


3

Bu kod benim için çalıştı. Kolay düzeltme, ancak muhtemelen tercih edilen bir yol değil.

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

protected Dialog createdDialog(int id) {
    // Your code
}

ama LIstener bu yöntemde nasıl uygulanır? Tarih ve Saat diyaloğu için diyelim .... @MishaLee
gumuruh

Xml'de onClick özelliğini tanımladığınızda Android bunu sizin için yapar.
MishaLee

1
@gumuruh Android, xml'de onClick özniteliğini şu şekilde tanımladığınızda Dinleyici yapar: android: onClick = "onClick" ve ardından Java'da yukarıdaki yöntem. Özel bir Dinleyiciye ihtiyacınız varsa, kendiniz bir tane tanımlamanız gerekir. Bu soru bağlantısında
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 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.