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嵌套的更多相关文章

  1. Viewpager模仿微信主布局的三种方式 ViewPager,Fragment,ViewPager+FragmentPagerAdapter

    效果大概就是这样 很简单 : 1 创建 top 和bottom 2主界面布局 添加top 和bottom 中间添加一个ViewPage 3 给ViewPager 和 底部View设置点击事件 源码下载 ...

  2. 笔记(二)TabLayout + ViewPager + FragmentPagerAdapter 组合用法

    TabLayout的xml文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  3. Android Tab -- 使用ViewPager、Fragment、FragmentPagerAdapter来实现

    原文地址:http://blog.csdn.net/crazy1235/article/details/42678877 效果:滑动切换:点击标签切换. 代码:https://github.com/l ...

  4. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

  5. Android应用经典主界面框架之二:仿网易新闻client、CSDN client (Fragment ViewPager)

    另外一种主界面风格则是以网易新闻.凤凰新闻以及新推出的新浪博客(阅读版)为代表.使用ViewPager+Fragment,即ViewPager里适配器里放的不是一般的View.而是Fragment.所 ...

  6. Android控件-Fragment+ViewPager(高仿微信界面)

    什么是Fragment? Fragment是Android3.0后新增的概念,Fragment名为碎片,不过却和Activity十分相似,具有自己的生命周期,它是用来描述一些行为或一部分用户界面在一个 ...

  7. Android中Fragment+ViewPager的配合使用

    官方推荐 ViewPager与Fragment一起使用,可以更加方便的管理每个Page的生命周期,这里有标准的适配器实现用于ViewPager和Fragment,涵盖最常见的用例.FragmentPa ...

  8. Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPager

    action来实现tab标签 并跟fragment结合 因为要写新闻客户端这个tab导航是必须的 这里我写几个小练习,希望大家融会贯通. 1actionbar设置tab +fragment 布局是个l ...

  9. Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24740977 Android如今实现Tab类型的界面方式越来越多,今天就把常见的 ...

随机推荐

  1. 了解负载均衡 会话保持 session同步(转)

    一,什么负载均衡 一个新网站是不要做负载均衡的,因为访问量不大,流量也不大,所以没有必要搞这些东西.但是随着网站访问量和流量的快速增长,单台服务器受自身硬件条件的限制,很难承受这么大的访问量.在这种情 ...

  2. javascript——面向对象程序设计(1)

    <script type="text/javascript"> //ECMA-262把对象定义为:“无序属性的 集合,其属性可以包含基本值.对象或者函数” //理解对象 ...

  3. OC文件操作(1)

    1.文件的浅度遍历与深度遍历: //NSFileManager * fm = [[NSFileManager alloc]init];//创建文件管理器 //第一步创建一个文件管理器 NSError ...

  4. yum安装ftp服务器

    1.安装vsftp,本文采用yum安装: #yum install vsftpd 2.安装后运行: # service vsftpd restart Shutting downvsftpd:      ...

  5. C#DataTable操作

    ] 在DataSet中添加DataTable DataSet.Tables.Add(DataTable) 实例: DataSet ds=new DataSet(); DataTable table=n ...

  6. web版扫雷小游戏(二)

    接上篇~~第一次写这种技术博客,发现把自己做的东西介绍出来还是一件脑力活,不是那么轻松啊,好吧,想到哪写到哪,流水记录之,待完成之后再根据大家的意见进行修改吧. 游戏实现 根据对扫雷游戏的体验和分析, ...

  7. 18 4Sum(寻找四个数之和为指定数的集合Medium)

    题目意思:给一个乱序数组,在里面寻找三个数之和为target的所有情况,这些情况不能重复,增序排列 思路:采用3Sum的做法 ps:有见一种用hash的,存任意两个元素的和,然后变成3sum问题,需要 ...

  8. Jsoup库 解析DOM文档

    DOM文档包括 HTML, XML等等 下载: http://jsoup.org/download Jsoup 获取数据的方式 //html 文本, url, 本地html String html = ...

  9. Keil的使用-1创建项目和工程

    下载keil,注意不要使用MDK版本(主要是arm开发使用),大小约54M 安装过程不再详述 安装Keil成功并运行后,新建项目,   创建新项目,然后弹出下图,选择对应的单片机芯片(双击)     ...

  10. Apache:To Config The Vhost of Django Project

    It is not a good idea to use dev server in Production Environment. Apache or Nginx are good choice.B ...