底部是RadioGroup中RadioButton的切换。上面时ViewPage ,能够滑动,假设你们的需求是不须要滑动的话,那就直接用FrameLayout就能够了。

以下将会用两种方式实现。请大家看代码。

效果图:

方式一:ViewPage + RadioGroup+Fragment 能够左右滑动

1.RadioGroup设置监听setOnCheckedChangeListener,改变上面的四个Fragment

	@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
switch (checkedId) {
case R.id.rb0:
viewPager.setCurrentItem(0);
break;
case R.id.rb1:
viewPager.setCurrentItem(1);
break;
case R.id.rb2:
viewPager.setCurrentItem(2);
break;
case R.id.rb3:
viewPager.setCurrentItem(3);
break;
}
}

2.ViewPager设置监听setOnPageChangeListener。改变RadioButton的选中

	@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
switch (position) {
case 0:
if (radioGroup.getCheckedRadioButtonId() != R.id.rb0) {
radioGroup.check(R.id.rb0);
}
break;
case 1:
if (radioGroup.getCheckedRadioButtonId() != R.id.rb1) {
radioGroup.check(R.id.rb1);
}
break;
case 2:
if (radioGroup.getCheckedRadioButtonId() != R.id.rb2) {
radioGroup.check(R.id.rb2);
}
break;
case 3:
if (radioGroup.getCheckedRadioButtonId() != R.id.rb3) {
radioGroup.check(R.id.rb3);
}
break;
}
}

3.ViewPager适配器

public class ViewPagerAdapter extends FragmentPagerAdapter {

	private List<Fragment> fragments;

	public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
} @Override
public Fragment getItem(int position) {
// TODO Auto-generated method stub
return fragments.get(position);
} @Override
public int getCount() {
// TODO Auto-generated method stub
return fragments.size();
} }

方式二:RadioGroup+Fragment

1.RadioGroup设置监听setOnCheckedChangeListener。改变上面的四个Fragment

	@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.rb0:
manager.chReplaceFrag(fragment01, "fragment01", false);
break;
case R.id.rb1:
manager.chReplaceFrag(fragment02, "fragment02", false);
break;
case R.id.rb2:
manager.chReplaceFrag(fragment03, "fragment03", false);
break;
case R.id.rb3:
manager.chReplaceFrag(fragment04, "fragment04", false);
break;
}
}

2.假设你想要左右滑动,也是能够的,获取控件的实例,你要提出来。我这里是为了贴代码的完整性

	private float startx;
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
super.onTouchEvent(event);
RadioButton rb0 = (RadioButton) findViewById(R.id.rb0);
RadioButton rb1 = (RadioButton) findViewById(R.id.rb1);
RadioButton rb2 = (RadioButton) findViewById(R.id.rb2);
RadioButton rb3 = (RadioButton) findViewById(R.id.rb3);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startx = event.getX();
break;
case MotionEvent.ACTION_UP:
float endx = event.getX();
if (startx - endx > 100) {//右边
switch (rg.getCheckedRadioButtonId()) {
case R.id.rb0:
rb1.performClick();
break;
case R.id.rb1:
rb2.performClick();
break;
case R.id.rb2:
rb3.performClick();
break;
case R.id.rb3:
rb0.performClick();
break;
}
}else if (endx - startx > 100 ) {
switch (rg.getCheckedRadioButtonId()) {
case R.id.rb0:
rb3.performClick();
break;
case R.id.rb1:
rb0.performClick();
break;
case R.id.rb2:
rb1.performClick();
break;
case R.id.rb3:
rb2.performClick();
break;
}
}
break;
}
return false;
}

整个代码的布局设计:

1.FrameLayout+RadioGroup

<?xml version="1.0" encoding="utf-8"?

>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:background="@android:color/white"
android:layout_height="match_parent"> <FrameLayout
android:id="@+id/fragment_container"
android:layout_height="0dip"
android:layout_weight="1"
android:layout_width="match_parent"/> <RadioGroup
android:id="@+id/main_rg"
android:layout_height="50dip"
android:layout_width="match_parent"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb0"
android:checked="true"
style="@style/main_tab_style"
android:drawableTop="@drawable/tab_01_bg"
android:text="精选"/>
<RadioButton
android:id="@+id/rb1"
style="@style/main_tab_style"
android:drawableTop="@drawable/tab_02_bg"
android:text="分类"/>
<RadioButton
android:id="@+id/rb2"
style="@style/main_tab_style"
android:drawableTop="@drawable/tab_03_bg"
android:text="投资"/>
<RadioButton
android:id="@+id/rb3"
style="@style/main_tab_style"
android:drawableTop="@drawable/tab_04_bg"
android:text="我的"/>
</RadioGroup> </LinearLayout>

2.ViewPage+FrameLayout+RadioGroup

<?xml version="1.0" encoding="utf-8"?

>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical" > <android.support.v4.view.ViewPager
android:id="@+id/viewpage"
android:layout_height="0dip"
android:layout_weight="1"
android:layout_width="match_parent"/> <RadioGroup
android:id="@+id/main_rg"
android:layout_height="50dip"
android:layout_width="match_parent"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb0"
android:checked="true"
style="@style/main_tab_style"
android:drawableTop="@drawable/tab_01_bg"
android:text="精选"/>
<RadioButton
android:id="@+id/rb1"
style="@style/main_tab_style"
android:drawableTop="@drawable/tab_02_bg"
android:text="分类"/>
<RadioButton
android:id="@+id/rb2"
style="@style/main_tab_style"
android:drawableTop="@drawable/tab_03_bg"
android:text="投资"/>
<RadioButton
android:id="@+id/rb3"
style="@style/main_tab_style"
android:drawableTop="@drawable/tab_04_bg"
android:text="我的"/>
</RadioGroup> </LinearLayout>

3.文本颜色选择器

<?

xml version="1.0" encoding="utf-8"?

>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@color/green_common"/>
<item android:state_checked="false" android:color="@color/bg_gray_dark"/>
</selector>

4.背景图片选择器

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_checked="true" android:drawable="@drawable/ic_main_tab_01_active"></item>
<item android:state_checked="false" android:drawable="@drawable/ic_main_tab_01_normal"></item>
</selector>

这里仅仅是贴出了核心的代码,须要整个可执行的代码,请点击以下的连接

源代码下载地址:http://download.csdn.net/detail/pcaxb/8999891

ViewPage + RadioGroup + Fragment学习的更多相关文章

  1. 33.Android之Fragment学习

    Fragment Android是在Android 3.0 (API level 11)开始引入Fragment的. 可以把Fragment想成Activity中的模块,这个模块有自己的布局,有自己的 ...

  2. RadioGroup+Fragment 使用Fragment的add()方法,防止使用replace每次都重新加载页面,造成资源浪费

    radiogroup+fragment是很常用的主页导航控件,之前为了代码简便一直使用的replace()替换fragment,代码如下: getSupportFragmentManager().be ...

  3. Android RadioGroup Fragment Viewpager FragmentPagerAdapter 去哪网Fragment嵌套

    RadioGroup中的各个选择器 <selector xmlns:android="http://schemas.android.com/apk/res/android"& ...

  4. Android之Fragment学习总结(1)

    对于Fragment的学习: 近日初步学习了Fragment这以特殊的组件,其依托与一个Activity,与Activity的生命周期息息相关,为其设置的视图只有当其关联到一个Activity才会起效 ...

  5. Fragment学习笔记

    Fragment为大量型号,尺寸,分辨率的设备提供了一种统一的UI优化方案.将Activity分解为多个Fragment,将极大地提高UI的灵活性,也更容易为一些新的设备配置带来更好的用户体验. on ...

  6. Android Fragment学习笔记(二)----Fragment界面添加和管理

    Fragment界面添加 了解过fragment的生命周期等简单知识,于是去看官方文档来了解更多相关内容,要添加fragment到我们的UI界面中,给出了两种常用的方法,第一个是在activity的布 ...

  7. Android之Fragment学习笔记②(Fragment生命周期)

    一. Fragment生命周期图                                  二.Fragment生命周期方法介绍 Fragment的生命周期和activity生命周期很像,其生 ...

  8. Android之Fragment学习笔记①

    Android Fragment完全解析,关于碎片你所需知道的一切 一. 什么是FragmentFragment(碎片)就是小型的Activity,它是在Android3.0时出现的.Fragment ...

  9. ViewPage显示Fragment集合实现左右滑动并且出现tab栏--第三方开源--SlidingTabLayout和SlidingTabStrip实现

    注意:有关Fragment的方法和ViewPager的全部是android.support.v4包的,否则会报很多的错误 MainActivity: package com.zzw.fragmentt ...

随机推荐

  1. Antd前端开发采坑记录

    背景 基于页面友好,界面整洁美观:基于Antd框架开发虾能平台 选型 基于Antd-admin工程架构,进行开发:基于Antd+React+Umj 采坑记录 按照Html方式天机onClick方法,每 ...

  2. HDU 4597 Play Game (DP,记忆化搜索)

    Play Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total S ...

  3. More about STALL

    http://fx.damasgate.com/more-about-stall/ In other USB classes, a sender can indicate the end of a t ...

  4. GDB 自动化操作的技术-PYTHON

    https://github.com/spacewander/debugger-utils http://python.jobbole.com/85415/ https://segmentfault. ...

  5. 分布式中使用redis进行session共享

    摘要 在asp.net web中,session经常用来存储当前用户信息,或者通过session进行登录权限的验证.如果是一台服务器,session的使用没问题,如果使用nginx等实现反向代理,将站 ...

  6. SonarQube使用

    SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误,下面将会介绍一下这个工具的安装.配置以及使用. 一.安装 1.下载好sonarqube后,解压打开bin目录,启 ...

  7. 彻底理解jdbc为什么用反射创建驱动程序对象

    1.class.forName(mysql),这样更换数据库时,不需要更改程序代码,程序不需要重新编译就能运行. 因为反射是动态编译的,程序运行期间生成指定类的对象, 这样就可以程序运行期间生成不同的 ...

  8. [self removeAllSubviews]; // 删除所有子视图(包括 selfl.view) 所以,要慎用

    [self removeAllSubviews];  //删除所有子视图(包括 selfl.view)   所以,要慎用

  9. Appium+python自动化3-启动淘宝app

    前言 前面两篇环境已经搭建好了,接下来就是需要启动APP,如何启动app呢?首先要获取包名,然后获取launcherActivity.获取这两个关键东西的方法很多,这里就不一一多说,小伙伴们可以各显神 ...

  10. Oracle 10g AND Oracle 11g手工建库案例--Oracle 10g

    Oracle 10g AND Oracle 11g手工建库案例--Oracle 10g 系统环境: 操作系统: RedHat EL6 Oracle:  Oracle 10g and Oracle 11 ...