showDialog는 더 이상 사용되지 않습니다. 대안은 무엇입니까?


99

호출해야 할 다른 것이 있습니까?

showDialog(TIME_DIALOG_ID);

그것은에있어 이 튜토리얼 하지만 말합니다 되지 이클립스.

답변:


90

에서 http://developer.android.com/reference/android/app/Activity.html

public final void showDialog (int id) API 레벨 1에 추가됨

이 메소드는 API 레벨 13에서 더 이상 사용되지 않습니다. 대신 FragmentManager와 함께 새 DialogFragment 클래스를 사용하십시오. Android 호환성 패키지를 통해 이전 플랫폼에서도 사용할 수 있습니다.

인수를 사용하지 않는 간단한 버전의 showDialog (int, Bundle). 단순히 null 인수로 showDialog (int, Bundle)를 호출합니다.

  • 활동 창 위에 떠있는 대화 창을 표시하는 프래그먼트입니다. 이 조각에는 조각의 상태에 따라 적절하게 표시되는 Dialog 개체가 포함되어 있습니다. 대화 상자 제어 (표시, 숨기기, 닫힘시기 결정)는 대화에서 직접 호출하는 것이 아니라 여기에서 API를 통해 수행해야합니다.
  • 다음은 Android DialogFragment 대 Dialog에 대한 좋은 토론입니다.
  • AlertDialog보다 좋은 또 다른 좋은 토론 DialogFragment 장점

해결하는 방법?


8

에서 Activity#showDialog(int):

이 메소드는 더 이상 사용되지 않습니다. 대신
DialogFragment클래스를 FragmentManager사용하십시오. Android 호환성 패키지를 통해 이전 플랫폼에서도 사용할 수 있습니다.


132
그래서 간단한 함수를 호출하는 대신 또 다른 커스텀 클래스를 구현해야합니까? 한숨
세린

4
Deprecated는 사라진 것과 같은 것이 아닙니다. 더 이상 사용되지 않는 기능이 여전히 작동하고 지원하려는 이전 플랫폼에서 대체 기능을 사용할 수없는 경우 계속해서 사용합니다.
Edward Falk 2012 년

@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는 xml에서 onClick 속성을 정의 할 때 자동으로 수행합니다.
MishaLee 2014-08-07

1
@gumuruh Android는 다음과 같이 xml에서 onClick 속성을 정의 할 때 리스너를 수행합니다. android : onClick = "onClick"및 Java에서 위의 메소드. 사용자 지정 리스너가 필요하면 직접 정의해야합니다. 자세한 내용은이 질문 링크에 있습니다
MishaLee 2014-08-07

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.