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了,希望对您有所帮助吧