转载请标明出处:

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了,非要什么分,一般的哪有那么多分,有的还是诈分的,真的气人)

Fragment多重嵌套实现电影,影院展示页的更多相关文章

  1. 安卓ListView行详细内容展示页编写和下拉刷新实现

    ListView行详细内容展示页: 使用轻量级的Fragment实现Listview行内容简单的详细信息展示: 值得注意的是: 1. 主布局(打开它的Activity)必须是FrameLayout布局 ...

  2. fragment中嵌套viewpager,vierpager中有多个fragment,不显示 .

    fragment中嵌套viewpager,vierpager中有多个fragment,不显示 ... 现在好多应用流行一种布局.底部几个工具栏选项,上面也有类似tab的选项. 底部用RadioGrou ...

  3. Fragment里面嵌套Fragment的问题

    最近两天做项目时,要在fragment里面嵌套Fragment,最开始使用Fragment的hide,show等方法一直失败,,如图,message是一个fragment,在里面又有两个子fragme ...

  4. 关于TabLayout与ViewPager在Fragment中嵌套Fragment使用或配合使用的思考

    注意: 因为继承的是Fragment,所以getSupportFragmentManager()与getFragmentManager()方法无法使用,这里需要用到getChildFragmentMa ...

  5. shell 多行重定向方法(多重嵌套)

    这里讲的是多重嵌套.没用过 EOF的朋友请参考其他基础贴 在自动化运维中,常常需要shell脚本.在自动化创建脚本时,会遇到脚本内容里有用EOF重定向到配置文件的代码. 这样就不能用EOF来创建脚本了 ...

  6. 微信小程序_(校园视)开发视频的展示页_下

    微信小程序_(校园视) 开发用户注册登陆 传送门 微信小程序_(校园视) 开发上传视频业务 传送门 微信小程序_(校园视) 开发视频的展示页-上 传送门 微信小程序_(校园视) 开发视频的展示页-下 ...

  7. 微信小程序_(校园视)开发视频的展示页_上

    微信小程序_(校园视) 开发用户注册登陆 传送门 微信小程序_(校园视) 开发上传视频业务 传送门 微信小程序_(校园视) 开发视频的展示页-上 传送门 微信小程序_(校园视) 开发视频的展示页-下 ...

  8. wordpress 自定义路由及展示页

    wordpress 自定义路由及展示页 注册domain/test这个路由 wordpress 有重写url的方法,叫 add_rewrite_rule().在function.php中加入如下代码段 ...

  9. ajax的get方法获取豆瓣电影前10页的数据

    # _*_ coding : utf-8 _*_ # @Time : 2021/11/2 11:45 # @Author : 秋泊酱 # 1页数据 电影条数20 # https://movie.dou ...

随机推荐

  1. 利用bootstrap写的一点本地(localStorage)储存

    摘要: H5本地存储 在以前,我们想要存储一些数据,并且只是在前端使用,服务端并不会使用,我们只能存在cookie里,但是cookie会跟随请求头在客户端和服务端之间来回传递,而且cookie还有一些 ...

  2. 高频dom操作和页面性能优化(转载)

    作者:gxt19940130 原文:https://feclub.cn/post/content/dom 一.DOM操作影响页面性能的核心问题 通过js操作DOM的代价很高,影响页面性能的主要问题有如 ...

  3. IPv6 VS IPv4,谈谈升级 IPv6 的必要性

    11月26日,中办.国办印发了<推进互联网协议第六版(IPv6)规模部署行动计划>,提出国内要在 5~10 年的时间形成下一代互联网自主技术体系和产业生态,建成全球最大规模的 IPv6 商 ...

  4. 用python的requests第三方模块抓取王者荣耀所有英雄的皮肤

    本文使用python的第三方模块requests爬取王者荣耀所有英雄的图片,并将图片按每个英雄为一个目录存入文件夹中,方便用作桌面壁纸 下面时具体的代码,已通过python3.6测试,可以成功运行: ...

  5. js 判断是否为数组的方式 及 类数组转换成数组格式

    1. 判断是否为数组的通用方式 Object.prototype.toString.call(o)=='[object Array]' 其他方式: typeof ,  instanceof,  ary ...

  6. Codeforces 558E A Simple Task

    题意:给定一个字符串,以及m次操作,每次操作对字符串的一个子区间进行升序或降序排序,求m次操作后的串 考虑桶排,发现线段树可以模拟桶排的过程,所以对26个字母分别建立线段树即可 #include< ...

  7. C#真的过时了吗?

    现在有一种言论:C#过时了!!! 有人说现在是BS的时代,C#开发BS网站的那一套,相对于Java.PHP来说,效率太低了! 有人说现在是移动互联网时代,C#作为微软主推的语言,无法开发移动应用成为其 ...

  8. Sublime Text 3 常用快捷键

    一. 选择类       Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本.     Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并 ...

  9. git实用攻略(二)

    最近团队的版本控制从svn切换到了git,虽说已经使用git有2年多了,也写了一个实用攻略,但是github上的项目使用经验和公司内部团队协作的使用经验还有很多不同.补充下新的使用体会. 首先还是看一 ...

  10. 【Access2007】解救被阉割的truncate

    Access2007使用被阉割的J-SQL语句,语法跟T-SQL语句.也就是寻常最标准的SQL语句一模一样,但就是仅保留insert into,delete,select,update与没太大意义的过 ...