使用FragmentManager托管AlertDialog

android 新手,学习笔记.

在andorid5.0之后,Google重新设计了系统的对话框, 相比旧系统版本的对话框,新版的对话框漂亮了很多,如果不限定版本,所有版本都能使用新特性, 则需要使用Appcompat兼容库,AppCompat 有自己的AlertDialog实现类,它和andoird操作系统内置版AlertDialog类似,导入AlertDialog时, 我们使用androi.support.v7.app.AlertDialog。

创建DialogFragment
建议将AlertDialog封装成DialogFragment实例中使用,当然不使用DialogFragment也可以显示AlertDialog视图,但不推荐这样做,使用FragmentManager管理对话框,可以更灵活的展示对话框,另外如果设备旋转,单独使用AlertDialog会消失,而封装在fragment 中的AlertDialog会被重建恢复。

创建新类继承DialogFragment

public class DatePickerFragment extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity())
                .setTitle(R.string.date_picker_title)
                .setPositiveButton(android.R.string.ok,null)
                .create();
    }
}

以上代码中使用AlertDialog.Builder类,创建AlertDialog实例。
然后调用下面两个AlertDialog.Builder方法,配置对话框

public AlertDialog.Builder setTitle (int titleId)
public AlertDialog.Builder setPositiveButton(int textId,DialogInterface.OnclickListener listener)

显示DialogFragment

要讲DialogFragment添加给FragmentManager管理并放到屏幕上,可调用fragment实例的一下方法

public void show(FragmentManager manager,String tagpublic void show(FragmentTransaction transaction,String tag

两种方法任你选择, 如果传入FragmentTransaction ,需要自己创建并提交事务
如果传入FragmentManager,系统会自动创建并提交事务。

 FragmentManager manager = getFragmentManager();
 DatePickerFragment picker = new DatePickerFragment();
 picker.show(manager, DIALOG_DATE);

* 此处一定要注意:DatePickerFragment 所继承的DialogFragment是v4 包下,如果导入的是app包下的,则上面的show方法会报错。

设置对话框显示的内容

接下来,使用AlertDialog.Builder的setView()方法,添加DatePicker组件给AlertDialog对话框:

public AlertDialog.Builder setView(View vuew)

该方法配置对话框,实现在对话框中标题栏与按钮之间显示传入的View对象。

创建布局文件dialog_date.xml


<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="wrap_content"
            android:calendarViewShown="false"
            android:id="@+id/dialog_date_picker"
            android:layout_height="wrap_content">

DatePicker>

然后在DatePickerFragment的 onCreateDialog()方法内,实例化DatePicker视图并添加给对话框

@override
public Dialog onCreateDialog(Bundle savedInstanceState){
    View view = LayoutInflater.from(getActivity())
                .inflate(R.layout.dialog_date,null);
    return new AlertDialog.Builder(getActivity())
            .setView(view)
            .setTitle(R.string.date_picker.title)
            .setPosiveButton(android.R.string.ok,null)
            .create();  
}

你可能感兴趣的:(学习笔记)