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. linux命令(5)文件操作:ls命令、显示文件总个数

    一:ls命令是最常用的linux命令了:下面是ls --help里面的用法 在提示符下输入ls --help ,屏幕会显示该命令的使用格式及参数信息: 先介绍一下ls命令的主要参数: -a 列出目录下 ...

  2. 区分listview的item和Button的点击事件

    这两天修改领导通的ListView widget,在ListView中加入Button这类的有 “点击” 事件的widget,发现原来listview的itemclick居然失效了, 后来在网上查资料 ...

  3. AD按键-矩阵按键:

    原理:利用数组分压+AD采集: 优点:一个IO口可以做成多个按键,节省IO口(矩阵键盘在>4时优点才能体现出来):可备用作为AD基准输入. 缺点:不能做成组合按键(或者电阻要精确选择):且离IO ...

  4. rpm 与压缩解压缩

    rpm包redhat package manager 逐渐地被linux发行版本使用的安装包 rpm -qa 查询所有linux中安装了那些rpm包 rpm -q mysql 查看mysql 包的信息 ...

  5. Cassandra安装及其简单试用

    官方主页:http://cassandra.apache.org/ 简介: The Apache Cassandra Project develops a highly scalable second ...

  6. c#生成缩略图

    publicstaticvoidGenThumbnail(Image imageFrom,stringpathImageTo,intwidth,intheight)         {         ...

  7. 使用mysql函数 group_concat 一点需要注意的

    这个函数是一个非常好用的函数,比如我们可以在 进行多对多关联表,进行批量查询的时候可以用到, 比如学生和老师是多对多的关系,如果我们希望查询 指定的一些老师对应的学生有哪些 的时候,一般的情况,我们可 ...

  8. compass项目监控文件报 /usr/bin/env 找不到文件

    1 找到ruby执行文件目录 $ wherris ruby ruby: /usr/lib/ruby /home/rudy/.rbenv/shims/ruby 2 设置软链接 sudo ln -s /h ...

  9. mysql 错误1054

    问题,当查询数据时,输入字符串是数字时,可以查询,但当输入字母字符串时却不能查询,总是提示错误1054 解决:将字符串打上单引号 字段对应的值如果为字符或字符串类型的时候,应用英文单引号括起来,你用的 ...

  10. 微信企业号开发--手机删除键keyup事件无效

    $('#input').keyup(function(){}); 其他的按键都是有效的,但是唯独删除按键无效. 以下方法可以解决: $('#input').bind('input propertych ...