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. MVC 安装

    mvc 4 支持window xp,window 7,window 8, mvc 4 支持vs2010,vs2012 vs2012中包含mvc4; vs2010中需要安装mvc4 安装包:

  2. C#之线程和并发

    建议大家对C#撑握的不错的时候,可以去看一些开源项目.走技术这条路,就要耐得住寂寞(群里双休日说要让群主找妹子进群的人必须反思),练好内功.不撑握C#高级知识点,别想看懂优秀的开源项目,更别指望吸收其 ...

  3. storm系统架构学习

    Storm架构如下图所示: 1.主控节点(Master Node) 运行Storm nimbus后台服务的节点(Nimbus),它是storm系统的中心,负责接收用户提交的作业(如同spark sub ...

  4. 如何修改tomcat的端口

    <Connector port="8485" protocol="HTTP/1.1" connectionTimeout="20000" ...

  5. ndk android studio万年坑

    先说javah万年坑 javah语法: Usage: javah [options] <classes> where [options] include: -o <file>  ...

  6. spring外部化配置

    例如 <bean id="dataSource" class="....." p:username="aa" p:password=& ...

  7. 轻量级的.Net ORM框架介绍

    轻量型 ORM 组件 FluentData 官网https://fluentdata.codeplex.com/ http://www.cnblogs.com/babietongtianta/p/43 ...

  8. 最大公约数Greatest Common Divisor(GCD)

    一 暴力枚举法 原理:试图寻找一个合适的整数i,看看这个整数能否被两个整形参数numberA和numberB同时整除.这个整数i从2开始循环累加,一直累加到numberA和numberB中较小参数的一 ...

  9. ubuntu入门知识

    1.linux系统发展历史 unix -> Linux -> ubuntu linux发展轨迹图 2.ubuntu下载和安装 推荐使用长期支持版本: 10.04,12.04,14.04或L ...

  10. 回朔法/KMP算法-查找字符串

    回朔法:在字符串查找的时候最容易想到的是暴力查找,也就是回朔法.其思路是将要寻找的串的每个字符取出,然后按顺序在源串中查找,如果找到则返回true,否则源串索引向后移动一位,再重复查找,直到找到返回t ...