Fragment多重嵌套实现电影,影院展示页

转载请标明出处:

http://www.cnblogs.com/dingxiansen/p/8135888.html
本文出自:丁先森-博客园

 

公司以前的app是用H5封的,由于一个模块效果用H5实现出来的效果不太理想,所以boss要求用原生的来实现,高(ni)兴(ma)的脑仁疼,先来看一下要实现的效果图:

然后下边的是我实现的效果:

 

视频弄了半天没弄好,尴尬,只有转换成gif图了(clever),哈哈哈,继续说内部的这个滑动效果呢,我以前的博客也写过,这里附上地址了:http://www.cnblogs.com/dingxiansen/p/7649930.html 

下拉刷新还没写,可以直接加刷新的代码,也挺简单的。

下边有下载地址,现在这些数据都是死数据,但是图片是使用的Picasso加载的网络图片,绑定数据的时候只需要你传入json就可以,对了,然后给你们推荐一个根据json自动生成

实体类的一个As插件GsonFormat:把json复制进去,然后就可以生成对应的实体类了,没图说啥都白说,看图

 

format可以格式化,然后点击OK就可以自动生成所需的实体类了。

在下边介绍使用方法

 

原先使用的H5封装的,跳转影院的时候,会重新创建一个,没有原生的那种切换效果,返回的时候竟然还是跳的影片的页面,这种效果用户体验感觉是肯定不好的,好在Android有Fragment可以使用啊,但是又出现问题了,Fragment中还有一个切换热映和即将上映的页面,里边还得要使用Fragment,哎,那就写吧,说一下实现的思路。

第一、先实现影片和影院的切换,这里使用的是RadioGroup+Fragment来实现的 ,这个效果像以前的QQ的一个效果,点击切换

主要是使用的RadioGroup的setOnCheckedChangeListener来控制

主要代码实现:

rg_movie.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                ft = fm.beginTransaction();
                switch (checkedId) {
                    case R.id.rb_movie_film:
                        ft.hide(cinemaFragment).show(filmFragment);
                        ft.commit();
                        break;
                    case R.id.rb_movie_cinema:
                        ft.hide(filmFragment).show(cinemaFragment);
                        ft.commit();
                        break;
                }
            }
        });

第二、内部的Fragment实现,点击影片之后,显示的是正在热映和即将热映

内部的这个呢是我封装的一个类库,导入这个类库就可以使用,主要是怎么在fragment中添加进去,代码实现

private void initView(View v) {
        cttl_film_tab = v.findViewById(R.id.cttl_film_tab);
        vp_film_viewpager = v.findViewById(R.id.vp_film_viewpager);
    }

    private void initTab(final List<Fragment> fragments) {
        titles = new String[]{"正在热映", "即将热映"};
        for (int i = 0; i < titles.length; i++) {
            fragments.add(MyFragment.newInstance());
        }
        //这里要使用getChildFragmentManager()
        //因为InputAddPhotoFragment属于我当期的Fragment,所以需要用我当前Fragment的FragmentManager去管理,而不是使用Activity的FragmentManager去管理。使用到的获取方法 就是getChildFragmetManager()。
        vp_film_viewpager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                return fragments.get(position);
            }
            @Override
            public int getCount() {
                return titles.length;
            }
            @Override
            public CharSequence getPageTitle(int position) {
                return titles[position];
            }
        });
        cttl_film_tab.setupWithViewPager(vp_film_viewpager);

    }

在实现setAdapter的时候注意,new FragmentPagerAdapter(getChildFragmentManager())这里要注意,使用的是getChildFragmentManager而不是getSupportFragmentManager

来说一下原因:

getFragmentManager()和getSupportFragmentManager()的区别很容易理解,android的v4扩展包中的FragmentActivity中获取FragmentManager使用的就是getSupportFragmentManager(),android.app中获取管理类的方法就是getFragmentManager()。

然后getChildFragmentManager()和getFragmentManager()属于两个不同的类,前者属于Fragment,看源码:

 

    /** 
        * Return a private FragmentManager for placing and managing Fragments 
        * inside of this Fragment. 
        */  
       final public FragmentManager getChildFragmentManager() {  
           if (mChildFragmentManager == null) {  
               instantiateChildFragmentManager();  
               if (mState >= RESUMED) {  
                   mChildFragmentManager.dispatchResume();  
               } else if (mState >= STARTED) {  
                   mChildFragmentManager.dispatchStart();  
               } else if (mState >= ACTIVITY_CREATED) {  
                   mChildFragmentManager.dispatchActivityCreated();  
               } else if (mState >= CREATED) {  
                   mChildFragmentManager.dispatchCreate();  
               }  
           }  
           return mChildFragmentManager;  
       }  

 

android官方对它的解释是,返回一个FragmentManager为了设置和管理当前Fragment内部的Fragment的们。举个例子,在我的Fragment布局中添加了一个Fragment容器,我的目的是在Fragment执行的过程中动态的添加一个Fragment,并且对他进行操作

因为InputAddPhotoFragment属于我当期的Fragment,所以需要用我当前Fragment的FragmentManager去管理,而不是使用Activity的FragmentManager去管理。使用到的获取方法 就是getChildFragmetManager()。

   最后我们来看一下getFragmentManager()的源码,它是属于FragmentActivity,代码如下:

    /** 
         * Return the FragmentManager for interacting with fragments associated 
         * with this activity. 
         */  
        public FragmentManager getSupportFragmentManager() {  
            return mFragments;  
        }  

看它的官方注释,是为了获取能管理和当前Activity有关联的Fragment的FragmentManager。总结,需要管理相互独立的并且隶属于Activity的Fragment使用FragmentManager(),而在Fragment中动态的添加Fragment要使用getChildFragmetManager()来管理。

 

说的再多,看看代码就明白了,项目下载地址:链接:https://pan.baidu.com/s/1nvL0BJN 密码:frbq (其实可烦CSDN了,非要什么分,一般的哪有那么多分,有的还是诈分的,真的气人)

 

转载于:https://www.cnblogs.com/dingxiansen/p/8135888.html

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值