Android DialogFragment

1.什么是DialogFragment?

Android 官方推荐使用 DialogFragment 来代替 Dialog ,可以让它具有更高的可复用性(降低耦合)和更好的便利性.

2.DialogFragment实现方式? 有什么区别?

有俩种方式可以实现DialogFragment

(1).覆写其 onCreateDialog 方法 实现简单的消息提示,用户点击取消或者确认(和AlertDialog写法一样,只不过是把它移到了DialogFragment的类里面,这里不多说,重要是第二种实现)

(2).覆写其 onCreateView 方法 使用自定义布局来实现其功能 

小结: DialogFragment其实就是创建一个Fragment的方式,实现其弹窗功能

3.开始使用

4.新建一个Fragment 需要继承自DialogFragment

上面也讲到需要覆写其onCreateView方法

View view = inflater.inflate(R.layout.您的布局名称, container, false);
return view;

加载布局,并且设置布局

5.新添加一个传值方法在Fragment中(Activity向Fragment中)

public static ConfirmInfoDiaLogFmt newInstance(String tittle) {
    ConfirmInfoDiaLogFmt fragment = new ConfirmInfoDiaLogFmt();
    Bundle bundle = new Bundle();
    bundle.putString("tittle", tittle);
    fragment.setArguments(bundle);
    return fragment;
}

6.在新建的Fragment中设置Dialog显示方式(全屏或者和你的布局大小自适应)

@Override
public void onResume() {
    super.onResume();

    ViewGroup.LayoutParams params = getDialog().getWindow().getAttributes();
    params.width = WindowManager.LayoutParams.WRAP_CONTENT;
    params.height = WindowManager.LayoutParams.WRAP_CONTENT;
    getDialog().getWindow().setAttributes((WindowManager.LayoutParams) params);
    getDialog().getWindow().setBackgroundDrawable(null);
    WindowManager m = getActivity().getWindowManager();
    Display d = m.getDefaultDisplay();  //为获取屏幕宽、高
    WindowManager.LayoutParams p = getDialog().getWindow().getAttributes();  //获取对话框当前的参数值
    p.width = (int) (d.getWidth()*0.9);
    getDialog().getWindow().setAttributes(p);     //设置生效

}

此代码为自适应,可改变为MATCH_PARENT(全屏)

7.在Activity中设置加载这个DialogFragment

ConfirmInfoDiaLogFmt affimInfoDiaLogFmt = ConfirmInfoDiaLogFmt.newInstance("名字");
confirmInfoDiaLogFmt.show(getSupportFragmentManager(), "edit");

运行一下,就能看到效果了

8.自定义布局实现,绝对不止这样,慢慢往下看

我的需求:我需要在DialogFrgament打开以后,要向此页面传递俩个List,做数据展示,所以,也牵扯到了使用Bundle传递数据

9.使用Bundle向打开的DialogFragment传递数据

Bundle bundle = new Bundle();        //新建Bundle对象
bundle.putStringArrayList("datas0", datas0);    //传递俩个List 也可以传递 int String 等其他类型
bundle.putStringArrayList("datas1", datas1);

affimInfoDiaLogFmt.setArguments(bundle);


10.在Fragment中接收传递过来的数据

Bundle bundle = getArguments();
ArrayList<String> datas0 = bundle.getStringArrayList("datas0");
ArrayList<String> datas1 = bundle.getStringArrayList("datas1");

 

11.在设置布局下方,可以findViewByid 获取控件id,做操作

 

12.如果您想点击取消或者确认关闭Dialog可以直接在Fragment中调用

dismiss();  

13.加载DialogFragment的时候,会自动把您的背景变暗,可响应外部点击事件,DialogFragment也会自动消失

 

14.当我们在DialogFragment做完了操作,想把操作好的数据返回给Aty时怎么办?

也要再向Aty传递数据吗??? No!No!No!

15.利用接口回调的方式返回数据,首先,定义一个接口

public interface ConfirmListener {
    void onClickComplete(String name);
}

16.在确认按钮处,调用这个接口,添加数据

ConfirmListener confirmListener = (ConfirmListener) getActivity();
confirmListener.onClickComplete("狗剩儿");

17.在Aty中实现接口

implements ConfirmInfoDiaLogFmt.ConfirmListener

18.重写定义好的方法

onClickComplete,再获取您存好的数据,搞事情就可以了

 

好了,DialogFragment就说到这里 现在已经凌晨3.21了,希望对您有所帮助吧

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值