showdialog метод устаревшим. Какая альтернатива?

есть ли что-то еще, что следует назвать?

showDialog(TIME_DIALOG_ID);

Это в этом уроке но говорит устаревший в Eclipse.

5 ответов


от http://developer.android.com/reference/android/app/Activity.html

public final void showDialog (int id) добавлен в API уровня 1

этот метод устарел на уровне API 13. Использовать новый DialogFragment класс с FragmentManager вместо этого; это также доступно на старых платформы через пакет совместимости Android.

простая версия showDialog (int, Bundle) , которая не принимает никаких аргументы. Просто вызывает showDialog (int, Bundle) с аргументами null.

почему

  • фрагмент, который отображает диалоговое окно, плавающее поверх окна его активности. Этот фрагмент содержит объект диалога, который отображается соответствующим образом в зависимости от состояния фрагмента. Управление диалогом (решение, когда его показывать, скрывать, отклонять) должно осуществляться через API здесь, а не с прямыми вызовами диалога.
  • вот хороший обсуждение Android DialogFragment vs Dialog
  • еще одна приятная дискуссия преимущества DialogFragment перед AlertDialog

как решить?

больше


С Activity#showDialog(int):

этот метод устарел.
Используйте новый DialogFragment класс FragmentManager вместо этого; это также доступно на старых платформах через пакет совместимости Android.


для отображения диалогового окна можно использовать следующий код. Это для отображения простого поля AlertDialog с несколькими флажками:

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

заголовок

тогда как если вы используете функцию showDialog для отображения другого диалогового окна или чего-либо в соответствии с переданными аргументами, вы можете создать функцию self и вызвать ее под


этот код работал для меня. Легко исправить, но, вероятно, не предпочтительный способ.

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 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