孚睿科技·ANDROID知识总结Android

为何使用DialogFragment?

2016-11-01  本文已影响446人  OlivineVip

问题的由来

最近在优化项目代码时,项目中创建对话框一般使用的是Dialog,AlertDialog。
但是当Dialog中View界面复杂、逻辑复杂时,导致当前页面既要写自己的页面逻辑,还要写Dialog中的逻辑。
官方推出了DialogFragment来代替Dialog,那我就去了解了下DialogFragment的使用。

DialogFragment的优点

DialogFragment使用

1. 创建DialogFragment

DialogFragment至少需要实现onCreateView或者onCreateDIalog方法中的一个。

public class MyDialogFragment extends DialogFragment  {
   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
           Bundle savedInstanceState){
       View view = inflater.inflate(R.layout.fragment_dialog, container);
       return view;
   }
}

public class MyDialogFragment extends DialogFragment  {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
     AlertDialog.Builder builder = new AlertDialog.Builder(getContext(),R.style.theme);
     builder.setTitle("对话框");
     View view = inflater.inflate(R.layout.fragment_dialog, container);
     builder.setView(view);
     builder.setPositiveButton("确定", null);
     builder.setNegativeButton("取消", null);
     return builder.create();
 }
}
2. 调用方式
MyDialogFragment fragment= new MyDialogFragment ();
fragment.show(getFragmentManager(), "MyDialogment");

关于fragment和activity之间进行通信可以使用接口回调的方式

DialogFragment的扩展

@Override
public void onStart() { //在onStart()中
    super.onStart();
    getDialog().getWindow().setBackgroundDrawableResource(R.drawable.background); //对话框背景
    getDialog().getWindow().setLayout(300,200); //宽高
}
public static MyDialogFragment newInstance(int num) {
        MyDialogFragment f = new MyDialogFragment();
        // Supply num input as an argument.
        Bundle args = new Bundle();
        args.putInt("num", num);
        f.setArguments(args);
        return f;
    }

参考文献

上一篇下一篇

猜你喜欢

热点阅读