Android DialogFragmentをつかってAlertDialogを表示する 【Android_TIPS】
Android 3.0から、android.support.v4パッケージが登場し、レイアウトを作る際にはFragmentクラスを使うことが推奨されるようになりました。
通常、FragmentクラスはAndroid 3.0以降でないと使うことができませんが、
Android 3.0未満のバージョンであってもandroid.support.v4パッケージを使用することで、Fragmentクラスを使用できるようになります。
Android SDK r20からはプロジェクトを新規作成すると、android.support.v4パッケージが
すでにリンクされた状態でプロジェクトが作成されるようです。
この変更によってさまざまなメソッドが非推奨になりましたが、その一つとしてAcitivityクラスのonCreateDialog()メソッドがあります。
今後はDialogFragmentクラスを使用し、AlertDialogを作成する方法が主流となっていくようです。
今回は、android.support.v4パッケージを使用し、DialogFragmentを使ってAlertDialogの表示を行っていきます。
Android 3.2のエミュレータ上で動かした場合
Android 2.1のエミュレータ上で動かした場合
src/com.example.hellodialogfragment/MainActivity.java
package com.example.hellodialogfragment;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.widget.Toast;
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyDialogFragment dialog = new MyDialogFragment();
dialog.show(getSupportFragmentManager(), "dialog");
}
public void doPositiveClick() {
Toast.makeText(this, "OKボタンがクリックされました", Toast.LENGTH_SHORT).show();
}
public void doNegativeClick() {
Toast.makeText(this, "Cancelボタンがクリックされました", Toast.LENGTH_SHORT).show();
}
public static class MyDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("タイトル");
builder.setMessage("メッセージ");
builder.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MainActivity activity = (MainActivity) getActivity();
activity.doPositiveClick();
}
});
builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MainActivity activity = (MainActivity) getActivity();
activity.doPositiveClick();
}
});
return builder.create();
}
}
}
ポイント
- DialogFragmentクラスを継承したクラスをインナークラスもしくは別ファイルで作る。この際、staticクラスにしておく。
- 上記クラス内で、onCreateDialog()メソッドをオーバーライドし、AlertDialogオブジェクトを作成する(いままでどおり)。
- 戻り値に上記AlertDialogオブジェクトを渡す
- ダイアログを表示したい場所で、上記クラスをインスタンス化し、show()メソッドを呼び出す。
参考HP
■Android Developers(DialogFragment)
http://developer.android.com/reference/android/app/DialogFragment.html