package jp.mixi.sample.dialog; 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.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Toast; public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.DialogFragment).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showMyDialogFragment(); } }); findViewById(R.id.AlertMyDialogFragment).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showAlertMyDialogFragment(); } }); findViewById(R.id.ErrorMyAlertDialogFragment).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showErrorMyAlertDialogFragment(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void showMyDialogFragment() { DialogFragment myDialogFragment = new MyDialogFragment(); // 引数にFramentManagerとtagを設定します myDialogFragment.show(getSupportFragmentManager(), "my_dialog_fragment"); } public void showAlertMyDialogFragment() { DialogFragment myAlertDialogFragment = new MyAlertDialogFragment(); myAlertDialogFragment.show(getSupportFragmentManager(), "my_alert_dialog_fragment"); } public void showErrorMyAlertDialogFragment() { DialogFragment errorMyAlertDialogFragment = new ErrorMyAlertDialogFragment(); errorMyAlertDialogFragment.show(getSupportFragmentManager(), "err_my_alert_dialog_fragment"); } /** * Dialogを使用して、コンテンツ領域に独自レイアウトは表示するサンプルです。 */ public static class MyDialogFragment extends DialogFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 独自のレイアウトをコンテンツ領域表示する場合、ここでViewをinfrateして返却する return inflater.inflate(R.layout.dialog_content, container, false); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Dialogを生成 Dialog dialog = super.onCreateDialog(savedInstanceState); // タイトルを設定 dialog.setTitle(R.string.my_dialog_fragment); return dialog; } } /** * AlertDialogを使用するサンプルです。コンテンツ領域に独自レイアウトは表示しません。 */ public static class MyAlertDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // AlertDialogはBuilderパターンで生成 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage(R.string.alert_dialog_message) // OKボタン .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Toast.makeText(getActivity(), "Positive", Toast.LENGTH_SHORT).show(); } }) // Cancelボタン .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Toast.makeText(getActivity(), "Negative", Toast.LENGTH_SHORT).show(); } }); // Dialogを作成して返却 return builder.create(); } } /** * エラーが発生します。<br> * AlertDialogを使用しつつ、コンテンツ領域に独自レイアウトを表示するサンプルです。 */ public static class ErrorMyAlertDialogFragment extends DialogFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Dialogと同じように表示したいコンテンツをinfrateして返却するとクラッシュします。 return inflater.inflate(R.layout.dialog_content, container, false); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); return builder.create(); } } }