虽然可以在代码中直接创建出Dialog,但更好的方式是将Dialog封装到DialogFragment中。
这么做最主要的好处是:
直接创建Dialog的话,如果发生屏幕旋转等事件,Dialog就会消失。
如果使用DialogFragment来封装Dialog,那么FragmentManager在重新创建Fragment时,会重新创建出Dialog。
DialogFragment最简单的使用方式是,定义子类重写其onCreateDialog方法,例如:
//这里继承的是AppCompat兼容库中的DialogFragment
//AppCompat兼容库能将部分最新系统的特色功能移植到Android旧版本系统中
public class DatePickerFragment extends AppCompatDialogFragment{
............
@Override
//在onCreateDialog创建出具体的Dialog
public Dialog onCreateDialog(Bundle savedInstanceState) {
..............
return new AlertDialog.Builder(getActivity())
.setView(v)
.setTitle(R.string.date_picker_title)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
...................
}
})
.create();
}
}
显示DialogFragment的代码类似于:
..............
mDateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentManager fm = getFragmentManager();
DatePickerFragment dialog = DatePickerFragment.newInstance(mCrime.getDate());
...........
//DialogFragment将自己提交给FragmentManager管理
//DIALOG_DATE是一个string字符串,是DialogFragment在fm队列中对应的识别参数
dialog.show(fm, DIALOG_DATE);
}
});
..............