1.定义几个fragment 的subclass 如fragmentone,fragmenttwo;

public class fragmentthree extends Fragment {
private View view;
/**
*
*/
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle SaveInflaterState){
view=inflater.inflate(R.layout.fragmentthree, container, false);
return view;
} }

布局就是一个简单的TextView

<?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:orientation="vertical" >
<TextView android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="three fragment" />
</LinearLayout>

2.主布局是这样的

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <android.support.v4.view.ViewPager
android:id="@+id/mViewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_weight="1" /> <include layout="@layout/top1" /> </LinearLayout>

其中的top1.xml 如下;定义了三个TextView 作为Tab;

<?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="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/cursor_line"
android:layout_width="fill_parent"
android:layout_height="10dp"
android:scaleType="matrix"
android:src="@drawable/ic_launcher" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:orientation="horizontal" > <TextView
android:id="@+id/tab01"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="tab01" /> <TextView
android:id="@+id/tab02"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="tab02" /> <TextView
android:id="@+id/tab03"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="tab03" />
</LinearLayout> </LinearLayout>

3.初始化viewpager

3.1

/*

* 初始化viewpager 1. 数据源 定义了一个List<Fragment> 并添加 Fragment 类 Subclass

* 如fragmentone; 2. 添加适配器 FragmentAdapter ;实例化FragmentAdapter 接口; 3.为

* viewpager 设置适配器;

*/

public void initview() {
// TODO Auto-generated method stub
lf = new ArrayList<Fragment>(); //
lf.add(new fragmentone());
lf.add(new fragmenttwo());
lf.add(new fragmentthree());
mFragAdapter madapter = new mFragAdapter(getSupportFragmentManager(),
lf);//
vp = (ViewPager) findViewById(R.id.mViewpager);
vp.setAdapter(madapter);//
vp.setCurrentItem(0);
vp.setOnPageChangeListener(new OnPageChangeListener() { @Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
mCurrentPageIndex = position;
tab1.setTextColor(Color.BLACK);
tab2.setTextColor(Color.BLACK);
tab3.setTextColor(Color.BLACK);
switch (position) {
case 0:
tab1.setTextColor(Color.RED);
break;
case 1:
tab2.setTextColor(Color.RED);
break;
case 2:
tab3.setTextColor(Color.RED);
break; }
} @Override
public void onPageScrolled(int position, float positionOffset,
int arg2) {
// TODO Auto-generated method stub
//Log.e("TAG", position + "------->" + positionOffset);
LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) mTabline
.getLayoutParams();
if (mCurrentPageIndex > position) {
lp.leftMargin = (int) (mCurrentPageIndex * mScreen1_3 + (positionOffset - 1)
* mScreen1_3);
} else {
lp.leftMargin = (int) (mCurrentPageIndex * mScreen1_3 + positionOffset
* mScreen1_3);
}
mTabline.setLayoutParams(lp); } @Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub }
}); }

其中适配器如下;

public class mFragAdapter extends FragmentPagerAdapter {
private List<Fragment> mFragments; public mFragAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
// TODO Auto-generated constructor stub
mFragments = fragments;
} @Override
public Fragment getItem(int position) {
// TODO Auto-generated method stub
return mFragments.get(position);
} @Override
public int getCount() {
// TODO Auto-generated method stub
return mFragments.size();
} }

4.初始化Tab的滑动条的宽度

/*
* 初始化滑动条的宽度 设置为手机屏幕的1/3
*/ private void initTabLine() {
mTabline = (ImageView) findViewById(R.id.cursor_line);
Display display = getWindow().getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
mScreen1_3 = outMetrics.widthPixels / 3;// 屏幕的1/3
// LayoutParams lp = (LayoutParams) mTabline.getLayoutParams();
LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) mTabline
.getLayoutParams();
lp.width = mScreen1_3;
mTabline.setLayoutParams(lp);
}

在3. 中同时定义了刚滑动viewpager 是Tab的滑动条也跟着一起动;

5.Tab按钮的点击事件的定义;

/*
* 初始化tab按钮的事件; 点击某个tab按钮 viewpager 转换fragment 通过ViewPager
* 类的setCurrentIndex()方法设置需要跳转的fragment
*/
private void initTabBtn() {
tab1 = (TextView) findViewById(R.id.tab01);
tab2 = (TextView) findViewById(R.id.tab02);
tab3 = (TextView) findViewById(R.id.tab03);
tab1.setOnClickListener(new mlistenter());
tab2.setOnClickListener(new mlistenter());
tab3.setOnClickListener(new mlistenter());
tab1.setTextColor(Color.RED);
}
public class mlistenter implements View.OnClickListener {

        @Override
public void onClick(View v) {
// TODO Auto-generated method stub switch (v.getId()) {
case R.id.tab01:
vp.setCurrentItem(0);
break;
case R.id.tab02:
vp.setCurrentItem(1);
break;
case R.id.tab03:
vp.setCurrentItem(2);
break; }
} }

其实就是通

vp.setCurrentItem(_index)来设置点击Tab按钮后的viewpager 要显示哪一个fragment

android Tab =viewpager+fragmnet的更多相关文章

  1. 仿百度壁纸客户端(一)——主框架搭建,自定义Tab+ViewPager+Fragment

    仿百度壁纸客户端(一)--主框架搭建,自定义Tab+ViewPager+Fragment 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment ...

  2. Android中viewPager的一两点使用

    Android中viewPager的一两点使用 viewPager是谷歌官方提供的一种方便实现页面滑动效果的控件,可以直接使用也可以和fragment联合使用.这里只简单说下直接使用. 使用viewP ...

  3. Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53205878本文出自[DylanAndroid的博客] Android中Vie ...

  4. android之ViewPager

    在android中ViewPager是非常常用的控件.它在android.support.v4.view.ViewPager下.你们自己可以进http://developer.android.com/ ...

  5. Android listview viewpager解决冲突 滑动

    Android listview viewpager滑动 跳动 冲突解决 ListView中嵌套ViewPage有或者滑动手势冲突解决   在listview 上使用 addHeaderView 在第 ...

  6. Android 使用ViewPager实现左右循环滑动图片

    ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,先上效果图,用美女图片是我一贯的作风,呵呵 1.    首先看一 ...

  7. android使用ViewPager实现欢迎引导页

    android使用ViewPager实现欢迎引导页 大多数APP第一次启动的时候,都会有一个引导界面,左右滑动,到最后一张,用户点击才再次进入主界面.当第二次启动的时候,则直接进入主界面. 这种效果一 ...

  8. android下ViewPager的使用,带下部选项栏的切换动画

    (文章针对类似我这种初学者,大神看到不要嘲笑) 演示 我的规矩是先上GIF动画效果(Linux下用转的GIF,清晰度还可以但是不知道为什么放博客上,界面会这么大): 代码: android中有View ...

  9. Android中ViewPager实现滑动条及与Fragment结合的实例教程

    ViewPager类主要被用来实现可滑动的视图功能,这里我们就来共同学习Android中ViewPager实现滑动条及与Fragment结合的实例教程,需要的朋友可以参考下 自主实现滑动指示条先上一个 ...

随机推荐

  1. Studio--代理设置(SDK下载代理设置)

    为啥Android Studio有代理一说呢.比如我们要下载某个插件,但是这个插件又被tc墙了,所以这个时候需要FQ才能安装.FQ其中的一种方式就是使用VPN,配置如下图: 输入VPN的IP和PORT ...

  2. Makefile Shell 脚本;sed命令

    1. 在Makefile中想使用shell脚本,需要添加"@"符号,例如: @if [ -d xxx ]; then \                        //-d 判 ...

  3. Java注解教程及自定义注解

    Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...

  4. sphinx 全文搜索引擎安装与配置

    sphinx 全文搜索引擎 sphinx的安装与配置 ------------------------------------------------------------------------- ...

  5. Python深入04 闭包

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 闭包(closure)是函数式编程的重要的语法结构.函数式编程是一种编程范式 (而 ...

  6. centos的软件安装方法rpm和yum

    centos的软件安装大致可以分为两种类型: [centos]rpm文件安装,使用rpm指令  类似[ubuntu]deb文件安装,使用dpkg指令 [centos]yum安装   类似[ubuntu ...

  7. hibernate one-to-many many-to-one 双向注解

    建表语句: DROP TABLE IF EXISTS `t_company`; CREATE TABLE `t_company` ( `companyId` ) unsigned NOT NULL A ...

  8. VirtualBox 使用

    安装: # pacman -S virtualbox 配置: 使用时加载vboxdrv模块:#modprobe vboxdrv (或者设置开机加载:1.建立文件“/etc/modules-load.d ...

  9. 访问控制符private,default,protect和public

    程序,通过封装以实现"高内聚,内耦合". 个人理解,类内,包内,子类和所有类,是java的四个范围. private表示作用区域为类内,即只是自己(像牙刷). default表示作 ...

  10. 使用appium模拟用户发送短信

    一段简单粗糙的代码.主要是实现的功能是模拟用户发送短信的功能. python版本3.5.2 appium版本1.4.16.1 from appium import webdriver desired_ ...