Android Api demo系列(15) (App>Fragment>FragmentAlertDialog高级使用)

App>Fragment>FragmentAlertDialog高级使用

本文讲的是DialogFragment的叠加使用
核心逻辑在下面这个方法中:
    void showDialog() {
        mStackLevel++;
        //DialogFragment.show()将负责在事务中添加片段。
        // 我们也想删除任何当前显示的对话框,所以做我们自己的交易,并在这里照顾。
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        Fragment prev = getFragmentManager().findFragmentByTag("dialog");
        if (prev != null) {
            ft.remove(prev);
        }
        ft.addToBackStack(null);//设置将上一个fragment回退到栈中,方便回退显示上一个fragment。

        // Create and show the dialog.
        DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
        newFragment.show(ft, "dialog");
    }


可以一直调用这个方法而产生很多个DialogFragment叠加在一块。
因为现实只能显示一个fragment,所以先要移除之前的fragment,当回退的时候上一个fragment在栈中,所以直接就显示上一个fragment了。
从代码中可以看出每次都创建一个dialogfragment对象show出来。

而且在Dialogfragment中的oncreateview方法中返回的view显示dialog布局。而不是之前在oncreatDialog方法中返回一个AlertDialog对象。所以只能当此为一个简单的fragent对待。
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.fragment_dialog, container, false);
            View tv = v.findViewById(R.id.text);
            ((TextView)tv).setText("Dialog #" + mNum + ": using style "
                    + getNameForNum(mNum));

            // Watch for button clicks.
            Button button = (Button)v.findViewById(R.id.show);
            button.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    // When button is clicked, call up to owning activity.
                    ((FragmentDialog)getActivity()).showDialog();
                }
            });

            return v;
        }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值