showDialog เลิกใช้งานแล้ว ทางเลือกคืออะไร?


คำตอบ:


92

จากhttp://developer.android.com/reference/android/app/Activity.html

โมฆะสาธารณะสุดท้าย showDialog (int id) เพิ่มใน API ระดับ 1

วิธีนี้เลิกใช้แล้วใน API ระดับ 13 ให้ใช้คลาส DialogFragment ใหม่กับ FragmentManager แทน นอกจากนี้ยังมีให้บริการบนแพลตฟอร์มรุ่นเก่าผ่านแพ็คเกจความเข้ากันได้ของ Android

showDialog (int, Bundle) เวอร์ชันธรรมดาที่ไม่ใช้อาร์กิวเมนต์ใด ๆ เพียงแค่เรียก showDialog (int, Bundle) ด้วยอาร์กิวเมนต์ว่าง

ทำไม

  • ส่วนที่แสดงหน้าต่างโต้ตอบลอยอยู่ด้านบนของหน้าต่างกิจกรรม แฟรกเมนต์นี้มีอ็อบเจ็กต์ Dialog ซึ่งจะแสดงตามความเหมาะสมตามสถานะของแฟรกเมนต์ การควบคุมกล่องโต้ตอบ (ตัดสินใจว่าจะแสดงซ่อนปิดเมื่อใด) ควรดำเนินการผ่าน API ที่นี่ไม่ใช่ด้วยการเรียกโดยตรงในกล่องโต้ตอบ
  • นี่คือการสนทนาที่ดี Android DialogFragment vs Dialog
  • ข้อดีอีกอย่างของการอภิปราย DialogFragment ที่ดีกว่า AlertDialog

วิธีแก้?

มากกว่า


8

จากActivity#showDialog(int):

วิธีนี้เลิกใช้แล้ว
ใช้DialogFragmentคลาสใหม่FragmentManagerแทน; นอกจากนี้ยังมีให้บริการบนแพลตฟอร์มรุ่นเก่าผ่านแพ็คเกจความเข้ากันได้ของ Android


134
ดังนั้นแทนที่จะเรียกใช้ฟังก์ชันธรรมดาคุณต้องใช้คลาสที่กำหนดเองอื่นหรือไม่? ถอนหายใจ
Cerin

4
เลิกใช้แล้วไม่ใช่สิ่งเดียวกับที่หายไป หากฟังก์ชันที่เลิกใช้แล้วยังใช้งานได้และไม่มีทางเลือกอื่นในแพลตฟอร์มรุ่นเก่าที่ฉันต้องการสนับสนุนฉันจะใช้งานต่อไป
Edward Falk

@Edward ฉันคิดว่ามีทางเลือกอื่นสำหรับแพลตฟอร์มรุ่นเก่าตรวจสอบที่นี่: developer.android.com/reference/android/support/v4/app/…
Rui Posse

6

ในการแสดงกล่องโต้ตอบคุณสามารถใช้รหัสต่อไปนี้ นี่คือการแสดงกล่อง 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 เพื่อแสดงกล่องโต้ตอบที่แตกต่างกันหรืออะไรก็ได้ตามอาร์กิวเมนต์ที่ส่งผ่านคุณสามารถสร้างฟังก์ชันด้วยตนเองและสามารถเรียกใช้ภายใต้onClickListener()ฟังก์ชันได้ สิ่งที่ต้องการ:

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

และเพิ่มรหัสของกล่องโต้ตอบที่ระบุไว้ด้านบนในข้อกำหนดฟังก์ชัน


3

รหัสนี้ใช้ได้ผลสำหรับฉัน แก้ไขง่าย แต่อาจไม่ใช่วิธีที่ต้องการ

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

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

แต่จะใช้ LIstener ในวิธีนั้นได้อย่างไร? พูดสำหรับวันที่ & เวลาโต้ตอบ .... @MishaLee
gumuruh

Android ทำเพื่อคุณเมื่อคุณกำหนดแอตทริบิวต์ onClick เป็น xml
MishaLee

1
@gumuruh Android ทำ Listener ให้คุณเมื่อคุณกำหนดแอตทริบิวต์ onClick ใน xml ดังนี้: android: onClick = "onClick" ตามด้วยวิธีการด้านบนใน Java หากคุณต้องการ Listener ที่กำหนดเองคุณต้องกำหนดตัวเอง รายละเอียดเพิ่มเติมอยู่ในลิงค์คำถามนี้
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 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.