DialogFragment使用总结

DialogFramgment:结合DialogFragment的一种界面

初始化UI和填充数据时与Fragment类似

调用则是基于Dialog

DialogFragment.show()是用来在Activity中显示时调用的

 

DialogFragment.dismiss()方法为关闭

在之前的项目中,开发用该Fragment充当购买时选择规格的界面,需要考虑的是:Activity不销毁的情况下,如何保存上一次在DialogFramgment选中的规格.经过查找源码和翻阅资料,基于DialogFragment的特性有了如下代码

if(buyDialogFragment==null){
                                    buyDialogFragment=new GoodsBuyDialogFragment().setGoodsEntity(goodEntity).setBuyType(true);
                                    buyDialogFragment.show(getActivity().getSupportFragmentManager(), TAG);
                                }else{
                                    buyDialogFragment.setBuyType(true);
                                    buyDialogFragment.onStart();
                                }

首先需要记录DialogFramgent对象的内存地址,然后根据是否有该DialogFramgent对象去判断采用何种方式调用

DialogFragment中可以通过Fragment.onStart(),Fragment.onStop()去操控Dialog的显示或隐藏。并且不会导致Fragment销毁,如下图所示:

在布局文件中,需要让你的组件覆盖整个屏幕,如下图所示:

因为Dialog默认当点击在空白位置时,会调用Dialog.dismiss()方法,而DialogFragment有设置Dialog.dismiss的回调,会导致DialoFragment.dismissInternal()方法被触发。之后再调用Framgent.onStart()将会抛出空指针异常

Dialog除了点击空白地方会调用Dialog.dismiss()方法外,当点击返回键时也会触发Dialog.dismiss()方法

所以还需要在你的DialogFragment负责初始化的方法添加如下代码

getDialog().setOnKeyListener(this);

以及把复写的OnKeyListener.onkey()方法修改为如下代码:

@Override
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_BACK:
                onStop();
                return true;
        }
        return false;
    }

原理如下:

Dialog.dispatchKeyEvent()方法中会回调OnKeyListener.onKey()方法,以便于让开发者自定义Dialog按键监听

大家有没有注意到文中的buyDialogFragment.setBuyType(true);

这行代码代表的是每次显示DialogFragment时,必须由Activity控制的DailogFragment界面组件。

例:商品详情界面,点击添加购物车或点击立即购物,DialogFragment上的按钮也要随之变化

那么在DialogFragment中何时变化呢?请看下图:

因为是公司的项目,很抱歉整体的代码不能传给大家,如果有疑问的话,欢迎在下方评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值