---
DialogFragment で表示される Dialog を指定するための主なメソッドは次の2つ。 onCreateView() と onCreateDialog()。
Dialog のテーマと ContentView の中身だけ指定すればいい場合は onCreateView() の方だけを Override すればいいのですが、例えば OK と Cancel のある AlertDialog を作ろうとしたときは onCreateDialog() を Override して、表示したい AlertDialog のインスタンスを返すようにします。
このときに、onCreateView() で null 以外を返していると落ちます。
- public class MainActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- FragmentManager manager = getFragmentManager();
- MainFragmentDialog dialog = new MainFragmentDialog();
- dialog.show(manager, "dialog");
- }
- public class MainFragmentDialog extends DialogFragment {
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- return inflater.inflate(R.layout.main, null, false);
- }
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setTitle("タイトル");
- builder.setPositiveButton("OK", null);
- builder.setNegativeButton("Cancel", null);
- return builder.create();
- }
- }
- }
12-04 22:51:37.099: E/AndroidRuntime(586): Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
onCreateView() を Override せずに、onCreateDialog() で返す AlertDialog に対して setView() するのはOK
- public class MainActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- FragmentManager manager = getFragmentManager();
- MainFragmentDialog dialog = new MainFragmentDialog();
- dialog.show(manager, "dialog");
- }
- public class MainFragmentDialog extends DialogFragment {
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- LayoutInflater inflater = getActivity().getLayoutInflater();
- View view = inflater.inflate(R.layout.main, null, false);
- AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setTitle("タイトル");
- builder.setPositiveButton("OK", null);
- builder.setNegativeButton("Cancel", null);
- builder.setView(view);
- return builder.create();
- }
- }
- }
onCreateDialog() を Override しないとほんとに単純なダイアログしかだせないよねー。。。
0 件のコメント:
コメントを投稿