showDialog deprecated. What's the alternative?

前端 未结 5 1819
猫巷女王i
猫巷女王i 2020-12-12 15:17

Is there something else that should be called?

showDialog(TIME_DIALOG_ID);

It\'s in this tutorial but says deprecated in Eclipse.<

相关标签:
5条回答
  • 2020-12-12 15:51

    To display dialog box, you can use the following code. This is to display a simple AlertDialog box with multiple check boxes:

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

    Heading

    Whereas if you are using the showDialog function to display different dialog box or anything as per the arguments passed, you can create a self function and can call it under the onClickListener() function. Something like:

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

    and add the code of dialog box given above in the function definition.

    0 讨论(0)
  • 2020-12-12 15:51

    This code worked for me. Easy fix but probably not a preferred way.

    public void onClick (View v) {
        createdDialog(0).show(); // Instead of showDialog(0);
    }
    
    protected Dialog createdDialog(int id) {
        // Your code
    }
    
    0 讨论(0)
  • 2020-12-12 15:54

    From Activity#showDialog(int):

    This method is deprecated.
    Use the new DialogFragment class with FragmentManager instead; this is also available on older platforms through the Android compatibility package.

    0 讨论(0)
  • 2020-12-12 15:57
    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 
    
    0 讨论(0)
  • 2020-12-12 16:15

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

    public final void showDialog (int id) Added in API level 1

    This method was deprecated in API level 13. Use the new DialogFragment class with FragmentManager instead; this is also available on older platforms through the Android compatibility package.

    Simple version of showDialog(int, Bundle) that does not take any arguments. Simply calls showDialog(int, Bundle) with null arguments.

    Why

    • A fragment that displays a dialog window, floating on top of its activity's window. This fragment contains a Dialog object, which it displays as appropriate based on the fragment's state. Control of the dialog (deciding when to show, hide, dismiss it) should be done through the API here, not with direct calls on the dialog.
    • Here is a nice discussion Android DialogFragment vs Dialog
    • Another nice discussion DialogFragment advantages over AlertDialog

    How to solve?

    • http://android-developers.blogspot.in/2012/05/using-dialogfragments.html

    More

    • http://developer.android.com/guide/topics/fundamentals/fragments.html
    • http://developer.android.com/training/basics/fragments/index.html
    0 讨论(0)
提交回复
热议问题