zoukankan      html  css  js  c++  java
  • 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>
    View Code

    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

  • 相关阅读:
    mongo连接拒绝10061原因
    python爬取CNKI的期刊
    C语言socket编程
    Linux c time模块函数库
    linux下python3调用c代码或者python3调用c++代码
    stl综合
    linux c调用 mysql代码
    debian系列下c++调用mysql, linux下面安装mysql.h文件
    c++ linux socket编程 c++网络编程
    比较均值分析思路
  • 原文地址:https://www.cnblogs.com/xieyier/p/4171964.html
Copyright © 2011-2022 走看看