如何在DialogFragment中使用fragment

最近开发的App需要同时适配平板和手机,一个页面用Activity在手机上显示很好看,但是如果同样在平板上用Activity显示就会被拉伸的很难看,所以想到在手机上用Activity显示,而在平板上用DialogFragment显示界面。这时候问题来了,为了代码的复用性,怎么让Activity和DialogFragment中共用一份代码?想起来郭霖大神的书中提到(在此再次强烈安利一波郭霖大神的书,讲的很简单,但是讲到的东西都很重要,用到的场合很多)的,用碎片可以实现。然后动手开始撸代码,把内部的逻辑都写在自己的Fragment类中,然后在手机的Activity的布局中,放一个fragment就行了。但是怎么在DialogFragment中将fragment放进去呢?自己有点小白,刚开始想的方法是,既然DialogFragment继承自Fragment,能不能让DialogFragment继承自己的Fragment呢?明显不能。。。然后就想着能不能多继承,既能继承DialogFragment,又能继承Fragment呢?但是Java只能单继承,所以也不能。那应该怎么办呢?

想到既然Activity的布局里面可以嵌套fragment,那DialogFragment的布局里理论也应该能嵌套fragment的(所以说到底这个问题是fragment嵌套的问题,自己小白,大神勿喷),但是和在Activity布局中直接放一个fragment有区别,需要注意以下两点:

1.在DialogFragment中嵌套的fragment必须要有ID(或者至少要有tag),不然运行会崩溃

2.内嵌的fragment一定要销毁,否则会造成Duplicate id  tag null or parent id 0x0的错误,需要重写DialogFragment的OnDestroyView方法,具体的销毁代码如下

@Override
    public void onDestroyView() {
        super.onDestroyView();
        YourFragment fileFragment=(YourFileFragment)getFragmentManager().findFragmentById(R.id.downloadFile_fragment);
        if (fileFragment!=null)
            getFragmentManager().beginTransaction().remove(fileFragment).commit();
    }

其中YourFragment就是你嵌套在Activity中的碎片,这样就能在DialogFragment中使用fragment了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MeteorChenBo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值