Android RadioGroup Fragment Viewpager FragmentPagerAdapter 去哪网Fragment嵌套

RadioGroup中的各个选择器
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false" android:drawable="@color/bg_checked"/>
<item android:state_checked="true" android:drawable="@color/bg_normal"/>
</selector>
bg_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/icon_favor_press"/>
<item android:state_checked="false" android:drawable="@mipmap/icon_favor_normal"/>
</selector>
favor_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/icon_home_press"/>
<item android:state_checked="false" android:drawable="@mipmap/icon_home_normal"/>
</selector>
home_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/icon_order_press"/>
<item android:state_checked="false" android:drawable="@mipmap/icon_order_normal"/>
</selector>
order_selector
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/icon_setting_press"/>
<item android:state_checked="false" android:drawable="@mipmap/icon_setting_normal"/>
</selector>
setting_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/icon_uc_press"/>
<item android:state_checked="false" android:drawable="@mipmap/icon_uc_normal"/>
</selector>
uc_selector.xml
各个Fragment
 public class FavorFragment extends Fragment{
     @Nullable
     @Override
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
         View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
         return layout;
     }
     @Override
     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
         view.setBackgroundColor(Color.BLUE);
         TextView tv = (TextView) view.findViewById(android.R.id.text1);
         tv.setText("收藏");
         tv.setTextSize(50);
     }
 }
FavorFragment.java
 public class OrderFragment extends Fragment{
     @Nullable
     @Override
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
         View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
         return layout;
     }
     @Override
     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
         view.setBackgroundColor(Color.RED);
         TextView tv = (TextView) view.findViewById(android.R.id.text1);
         tv.setText("订单");
         tv.setTextSize(50);
     }
 }
OrderFragment.java
 public class SettingFragment extends Fragment{
     @Nullable
     @Override
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
         View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
         return layout;
     }
     @Override
     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
         view.setBackgroundColor(Color.WHITE);
         TextView tv = (TextView) view.findViewById(android.R.id.text1);
         tv.setText("设置");
         tv.setTextSize(50);
     }
 }
SettingFragment.java
 public class UCFragment extends Fragment{
     @Nullable
     @Override
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
         View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
         return layout;
     }
     @Override
     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
         view.setBackgroundColor(Color.YELLOW);
         TextView tv = (TextView) view.findViewById(android.R.id.text1);
         tv.setText("个人中心");
         tv.setTextSize(50);
     }
 }
UCFragment.java
首页中还要显示一个ViewPager,一页机票,一页景点,可以左右滑动,自定义指示器
 public class JiPiaoFragment extends Fragment{
     @Nullable
     @Override
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
         View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
         return layout;
     }
     @Override
     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
         view.setBackgroundColor(Color.DKGRAY);
         TextView tv = (TextView) view.findViewById(android.R.id.text1);
         tv.setText("机票");
         tv.setTextSize(50);
     }
 }
JiPiaoFragment.java
 public class JingDianFragment extends Fragment{
     @Nullable
     @Override
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
         View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
         return layout;
     }
     @Override
     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
         view.setBackgroundColor(Color.MAGENTA);
         TextView tv = (TextView) view.findViewById(android.R.id.text1);
         tv.setText("景点");
         tv.setTextSize(50);
     }
 }
JingDianFragment.java
 public class HomeFragment extends Fragment implements ViewPager.OnPageChangeListener, RadioGroup.OnCheckedChangeListener {
     List<Fragment> mList = new ArrayList<>();
     @Override
     public void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         mList.add(new JiPiaoFragment());
         mList.add(new JingDianFragment());
     }
     @Nullable
     @Override
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
         View layout = inflater.inflate(R.layout.fragment_home,null);
         return layout;
     }
     RadioGroup home_radioGroup;
     View view_indicator;
     ViewPager home_viewPager;
     @Override
     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
         home_radioGroup = (RadioGroup) view.findViewById(R.id.home_radioGroup);
         view_indicator =  view.findViewById(R.id.view_indicator);
         home_viewPager = (ViewPager) view.findViewById(R.id.home_viewPager);
         //在Fragment中设置FragmentPagerAdapter必须使用getChildFragmentManager
         FragmentManager fm = getChildFragmentManager();
         home_viewPager.setAdapter(new MyFragmentPagerAdapter(fm,mList));
         home_radioGroup.setOnCheckedChangeListener(this);
         home_viewPager.addOnPageChangeListener(this);
         //默认
         home_radioGroup.check(R.id.jipiao);
         initIndicator();
     }
     int width;
     public void initIndicator(){
         //指示器长度分一半
         width = getResources().getDisplayMetrics().widthPixels / 2;
         FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(width, FrameLayout.LayoutParams.MATCH_PARENT);
         view_indicator.setLayoutParams(params);
     }
     @Override
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
         FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view_indicator.getLayoutParams();
         int left = (int) ((position + positionOffset)*width);
         params.setMargins(left,0,0,0);
         view_indicator.setLayoutParams(params);
     }
     @Override
     public void onPageSelected(int position) {
         home_radioGroup.check(position == 0?R.id.jipiao:R.id.jingdian);
     }
     @Override
     public void onPageScrollStateChanged(int state) {
     }
     @Override
     public void onCheckedChanged(RadioGroup group, int checkedId) {
         home_viewPager.setCurrentItem(checkedId == R.id.jipiao? 0 : 1);
     }
 }
HomeFragment.java
由于需要创建很多Fragment实例,这里用工厂模式或者反射方式创建
 public class FragmentUtils {
     //工厂模式
     public static final Fragment newInstance(int type){
         switch (type){
             case 0:
                 return new FavorFragment();
             case 1:
                 return new OrderFragment();
             case 2:
                 return new HomeFragment();
             case 3:
                 return new UCFragment();
             case 4:
                 return new SettingFragment();
         }
         return null;
     }
     //反射方式
     public static final String[] classNames = {"Favor","Order","Home","UC","Setting"};
     public static final Fragment getInstance(int type){
         try {
             //通过一个类的字符串对象,转换成一个class类类型
             Class className = Class.forName("com.example.lesson10_viewpager_fragmentpageradapter_childfragment."+classNames[type]+"Fragment");
             //通过类的类型去创建实例,必须有无参构造方法,并公开
             return (Fragment) className.newInstance();
         } catch (ClassNotFoundException e) {
             e.printStackTrace();
         } catch (InstantiationException e) {
             e.printStackTrace();
         } catch (IllegalAccessException e) {
             e.printStackTrace();
         }
         return null;
     }
 }
FragmentUtils.java
 public class MyFragmentPagerAdapter extends FragmentPagerAdapter{
     List<Fragment> mList;
     public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> mList) {
         super(fm);
         this.mList = mList;
     }
     @Override
     public Fragment getItem(int position) {
         return mList.get(position);
     }
     @Override
     public int getCount() {
         return mList.size();
     }
 }
MyFragmentPagerAdapter.java
 public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener {
     RadioGroup radioGroup;
     Fragment[] fragments = new Fragment[5];
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
         radioGroup.setOnCheckedChangeListener(this);
         //默认显示首页
         showFragment(2);
         radioGroup.check(R.id.rb_home);
     }
     int currIndex = -1;
     public void showFragment(int index){
         if(index==currIndex){
             return;
         }
         FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
         if(currIndex != -1){
             ft.hide(fragments[currIndex]);
         }
         if(fragments[index]==null){
             //创建,用工厂类
             fragments[index] = FragmentUtils.newInstance(index);
             ft.add(R.id.fl_content,fragments[index]);
         }else{
             ft.show(fragments[index]);
         }
         currIndex = index;
         ft.commit();
     }
     @Override
     public void onCheckedChanged(RadioGroup group, int checkedId) {
         View view = group.findViewById(checkedId);
         String tag = view.getTag().toString();
         showFragment(Integer.parseInt(tag));
     }
 }
MainActivity.java
Android RadioGroup Fragment Viewpager FragmentPagerAdapter 去哪网Fragment嵌套的更多相关文章
- Viewpager模仿微信主布局的三种方式 ViewPager,Fragment,ViewPager+FragmentPagerAdapter
		
效果大概就是这样 很简单 : 1 创建 top 和bottom 2主界面布局 添加top 和bottom 中间添加一个ViewPage 3 给ViewPager 和 底部View设置点击事件 源码下载 ...
 - 笔记(二)TabLayout + ViewPager + FragmentPagerAdapter 组合用法
		
TabLayout的xml文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...
 - Android Tab -- 使用ViewPager、Fragment、FragmentPagerAdapter来实现
		
原文地址:http://blog.csdn.net/crazy1235/article/details/42678877 效果:滑动切换:点击标签切换. 代码:https://github.com/l ...
 - Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
		
今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...
 - Android应用经典主界面框架之二:仿网易新闻client、CSDN client (Fragment ViewPager)
		
另外一种主界面风格则是以网易新闻.凤凰新闻以及新推出的新浪博客(阅读版)为代表.使用ViewPager+Fragment,即ViewPager里适配器里放的不是一般的View.而是Fragment.所 ...
 - Android控件-Fragment+ViewPager(高仿微信界面)
		
什么是Fragment? Fragment是Android3.0后新增的概念,Fragment名为碎片,不过却和Activity十分相似,具有自己的生命周期,它是用来描述一些行为或一部分用户界面在一个 ...
 - Android中Fragment+ViewPager的配合使用
		
官方推荐 ViewPager与Fragment一起使用,可以更加方便的管理每个Page的生命周期,这里有标准的适配器实现用于ViewPager和Fragment,涵盖最常见的用例.FragmentPa ...
 - Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPager
		
action来实现tab标签 并跟fragment结合 因为要写新闻客户端这个tab导航是必须的 这里我写几个小练习,希望大家融会贯通. 1actionbar设置tab +fragment 布局是个l ...
 - Android项目Tab类型主界面大总结  Fragment+TabPageIndicator+ViewPager
		
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24740977 Android如今实现Tab类型的界面方式越来越多,今天就把常见的 ...
 
随机推荐
- Android JIN返回结构体
			
一.对应类型符号 Java 类型 符号 boolean Z byte B char C short S int I long J float ...
 - 【BZOJ3295】【块状链表+树状数组】动态逆序对
			
Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...
 - Flume研究心得
			
最近两天,仔细的看了一下Flume中央日志系统(版本号:1.3.X),Flume在本人看来,还是一个非常不错的日志收集系统的,其设计理念非常易用,简洁.并且是一个开源项目,基于Java语言开发,可以进 ...
 - JS判断浏览器是否支持某一个CSS3属性的方法
			
var div = document.createElement('div'); console.log(div.style.transition); //如果支持的话, 会输出 "&quo ...
 - jQuery 源码基本框架
			
抽丝剥茧, 7000+ 行的 jQuery 源码基本可以概括为以下的伪代码 (function (window, undefined) { //将 document 封装成 jQuery 对象并缓存 ...
 - php学习代码杂记
			
16/2/22 字符串连接 (1)连接运算符(“.”):它返回将右参数附加到左参数后面所得的字符串. (2)连接赋值运算符(“.=”):它将右边参数附加到左边的参数后. 相当于JS里面的 += . $ ...
 - MOS管(场效应管)导通条件
			
场效应管的导通与截止由栅源电压来控制,对于增强型场效应管来说,N沟道的管子加正向电压即导通,P沟道的管子则加反向电压.一般2V-4V就可以了. 但是,场效应管分为增强型(常开型)和耗尽型(常闭型 ...
 - CSS实现DIV三角形
			
本文内容收集来自网络 #triangle-up { width:; height:; border-left: 50px solid transparent; border-right: 50px s ...
 - 高级停靠(Dock)技术的实现
			
高级停靠(Dock)技术的实现 介绍 所谓停靠就是可以用鼠标拖动窗体或者控件,并将其从一个父窗体移出或者移动到另一个父窗体上,可以按水平,垂直方向整齐排列, 并且可以停靠在分页控制组件上.下面的示意图 ...
 - 提供进销存、ERP系统快速开发框架源码 (C#+SQL)
			
C/S系统开发框架-企业版 V4.0 (Enterprise Edition) 简介: http://www.csframework.com/cs-framework-4.0.htm 视频下载: 百度 ...