首页 > 学院 > 开发设计 > 正文

FragmentDialog的使用

2019-11-07 23:08:51
字体:
来源:转载
供稿:网友

好处:

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 自定义布局样式

@Overridepublic 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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表