如何在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了。

猜你喜欢

转载自blog.csdn.net/qq_31709249/article/details/82319521