showDialogは非推奨です。代替は何ですか?


回答:


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
非推奨はなくなったのと同じではありません。非推奨の機能がまだ機能し、サポートしたい古いプラットフォームで代替機能が利用できない場合は、先に進んでそれを使用します。
Edward Falk

私は古いプラットフォーム用の代替があることだと思う@Edward、こちらをご確認ください:developer.android.com/reference/android/support/v4/app/...
ルイポッセ

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関数を使用して別のダイアログボックスや何かを表示している場合は、self関数を作成して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

1
@gumuruh android:onClick = "onClick"のようにxmlでonClick属性を定義すると、Androidがリスナーを実行し、Javaで上記のメソッドを実行します。カスタムリスナーが必要な場合は、自分で定義する必要があります。詳細はこの質問リンクにあります
MishaLee 2014

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.