FragmentDialog的使用

转载请注明本文出自woochen123的博客(http://blog.csdn.net/chewu1590/article/details/57412842),请尊重他人的辛勤劳动成果,谢谢!

官方API:

https://developer.android.google.cn/guide/topics/ui/dialogs.html

好处:

1.官方不推荐直接使用Diaglog创建对话框
2.与fragment一样有正常的生命周期,便于管理

创建:

1.实现onCreateView方法(使用定义的xml布局文件展示Dialog)

可适用场景:全屏显示对话框或将其显示为嵌入式片段(参见)

  /** 系统调用这个来获取DialogFragment的布局,不管是否显示为对话框或嵌入的片段. */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.purchase_items, container, false);
    }

2.实现onCreateDialog方法(利用AlertDialog或者Dialog创建出Dialog)

2.1 AlertDialog样式
/** 只有在对话框中创建布局时,系统才会调用此方法. */
@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage(R.string.dialog_fire_missiles)
               .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                   }
               })
               .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                   }
               });
// Create the AlertDialog object and return it
        return builder.create();
    }
2.2 自定义布局样式
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    // Get the layout inflater
    LayoutInflater inflater = getActivity().getLayoutInflater();
    // Inflate and set the layout for the dialog
    builder.setView(inflater.inflate(R.layout.dialog_signin, null))
    // Add action buttons
           .setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int id) {
                   // sign in the user ...
               }
           })
           .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   LoginDialogFragment.this.getDialog().cancel();
               }
           });
    return builder.create();
}

使用:

DialogFragment newFragment = new FireMissilesDialogFragment();
//第二个参数 "missiles" 是系统用于保存片段状态并在必要时进行恢复的唯一标记名称。 
//该标记还允许您通过调用 findFragmentByTag() 获取片段的句柄。
newFragment.show(getSupportFragmentManager(), "missiles");

销毁:

1.当用户触摸使用 AlertDialog.Builder 创建的任何操作按钮时,系统会自动清除对话框
2.通过在 DialogFragment 上调用dismiss() 来手动清除对话框

常用API:

1.取消默认标题:getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
2.外部点击不消失:getDialog().setCanceledOnTouchOutside(false);

更多信息敬请关注微信:
woochen123

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值