android Tab =viewpager+fragmnet

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>(); // 1
        lf.add(new fragmentone());
        lf.add(new fragmenttwo());
        lf.add(new fragmentthree());
        mFragAdapter madapter = new mFragAdapter(getSupportFragmentManager(),
                lf);// 2
        vp = (ViewPager) findViewById(R.id.mViewpager);
        vp.setAdapter(madapter);// 3
        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

时间: 2024-10-28 23:02:09

android Tab =viewpager+fragmnet的相关文章

Android:ViewPager扩展详解——带有导航的ViewPagerIndicator(附带图片缓存,异步加载图片)

大家都用过viewpager了, github上有对viewpager进行扩展,导航风格更加丰富,这个开源项目是ViewPagerIndicator,很好用,但是例子比较简单,实际用起来要进行很多扩展,比如在fragment里进行图片缓存和图片异步加载. 下面是ViewPagerIndicator源码运行后的效果,大家也都看过了,我多此一举截几张图: 下载源码请点击这里 ===========================================华丽的分割线==============

Android的ViewPager的初步使用

之前想实现页面的滑动效果,在网上搜了下,挺多的关于TabHost的使用的例子,然后就使用了TabHost,但是效果非常一般(Maybe我不会用).然后同学介绍使用ViewPager,就上网问百老师,挺多例子挺详细的,亲自试了下,做出了我想要的效果,现在就总结下: 1.建立一个主的Activity,继承FragmentActivity,再创建一个Adapter类,继承FragmentPagerAdapter(继承其他Adapter没有测试过),使用的方式和ListView的Adapter差不多.然

Android 自定义 ViewPager 打造千变万化的图片切换效果

Android 自定义 ViewPager 打造千变万化的图片切换效果 标签: Android自定义ViewPagerJazzyViewPager 目录(?)[+] 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38026503 记 得第一次见到ViewPager这个控件,瞬间爱不释手,做东西的主界面通通ViewPager,以及图片切换也抛弃了ImageSwitch之类的,开 始让ViewPager来做.时间长了,ViewPa

【转】android 自定义ViewPager,修改原动画

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38026503 记 得第一次见到ViewPager这个控件,瞬间爱不释手,做东西的主界面通通ViewPager,以及图片切换也抛弃了ImageSwitch之类的,开 始让ViewPager来做.时间长了,ViewPager的切换效果觉得枯燥,形成了审美疲劳~~我们需要改变,今天教大家如何改变ViewPager 切换时的效果,实现个性化的图片切换~~ 看一下这样效果的图片切换: 是

Android重写ViewPager修改滑动灵敏度

使用ViewPager作为一个页面进行切换,里面可以存放很多View,但有时在操作View时不小心滑动一下就有可能跳到下一页,这并不是我们想要的,这里就需要重写ViewPager修改它的滑动条件 效果图 程序目录结构 BTViewPager.java package com.example.viewpagerdemo; import android.content.Context; import android.support.v4.view.ViewPager; import android.

Android中ViewPager+Fragment懒加载问题解决方案

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53205878 本文出自[DylanAndroid的博客] Android中ViewPager+Fragment懒加载问题解决方案 在Android中我们经常会用到ViewPager+Fragment组合.然而,有一个很让人头疼的问题就是,我们去加载数据的时候 由于ViewPager的内部机制所限制,所以它会默认至少预加载一个.这让人很郁闷,所以,我就想到要封装一个Fragme

Android listview viewpager解决冲突 滑动

Android listview viewpager 滑动 跳动 冲突解决 ListView中嵌套ViewPage有或者滑动手势冲突解决 在listview 上使用 addHeaderView 在第一栏添加 viewpager 当做header 如: 当触发 滑动事件 的时候容易引起 滑动冲突    (比如斜着滑动viewpager  的时候 listview会跳动) 特别是在  下拉刷新或者上拉加载 的时候 , 组件可能会传递到viewpager当中 查阅了很多的帖子  发现修改起来都非常麻烦

android 重写 viewpager

重写viewpager在viewpager里调用getChildAt(position)的时候发现有问题 很多获取的view都为null 查资料发现 是因为我在instantiateitem的时候调用的是((ViewPager) container).addView(view); 应该写成((ViewPager) container).addView(view, position); 运行之后报错,index越界 又查是因为viewpager里面默认可存的数量是有限的 ,应该是viewpager

Android利用ViewPager实现滑动广告板

•android-support-v4.jar,这是谷歌官方 给我们提供的一个兼容低版本Android设备的软件包,里面包囊了只有在Android3.0以上可以使用的api.而ViewPager就是其中之 一,利用它我们可以做很多事情,从最简单的导航,到页面切换菜单等等. •ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样. •本Demo向大家演示ViewPager的使用,并在用户未滑动View时,每隔5s钟自动切换到下一个View(循环切换),而当用户有Touch到