zoukankan      html  css  js  c++  java
  • Android笔记之ViewPager使用

    说明:1、ViewPager+Fragment组合为google推荐方式,比TabActivity+Activity的效率高的多

               2、本文主要介绍如何利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果,不涉及Tabost

               3、当滑到title3时,title1的界面被重置,不知怎么解决

    一、主布局文件activity_main.xml:

    <?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" >   
    
        <android.support.v4.view.ViewPager
            android:id="@+id/viewPager"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center" >
    
            <android.support.v4.view.PagerTabStrip    
                android:layout_width="wrap_content"    
                android:layout_height="wrap_content"    
                android:layout_gravity="top" />
        </android.support.v4.view.ViewPager>
    
    </LinearLayout>

    (1)ViewPager用来管理layout并可以左右滑动显示各个页面数据,PagerTabStrip用来显示页面title

    (2)android:layout_gravity="top"表示title在顶部,可设置bottom等。

    二.1、主Activity代码

    import java.util.ArrayList;
    import java.util.List;
    
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.view.ViewPager;
    
    public class MainActivity extends FragmentActivity {
        /** 多个fragment的list **/
        List<Fragment> fragmentList = new ArrayList<Fragment>();
        /** 多个String的list **/
        List<String>   titleList    = new ArrayList<String>();
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ViewPager vp = (ViewPager)findViewById(R.id.viewPager);
            
            fragmentList.add(new ViewPagerFragment(R.layout.lay1));
            fragmentList.add(new ViewPagerFragment(R.layout.lay2));
            fragmentList.add(new ViewPagerFragment(R.layout.lay3));
    //ViewPagerFragment是自己新建的继承Fragment的类,用来根据参数xml文件的id来返回一个view titleList.add(
    "title 1 "); titleList.add("title 2 "); titleList.add("title 3 "); vp.setAdapter(new myPagerAdapter(getSupportFragmentManager(), fragmentList, titleList));
            //将括号的内容为ViewPagerFragmen适配 }
    /** * 定义ViewPager的适配器:新建类,并创建构造函数接收参数,构造函数在每次新建该类(例如new)都会背调用*/ class myPagerAdapter extends FragmentPagerAdapter { private List<Fragment> fragmentList; private List<String> titleList; public myPagerAdapter(FragmentManager fm, List<Fragment> fragmentList, List<String> titleList){ super(fm); this.fragmentList = fragmentList;
                //this.fragmentList为这个类下的变量,右边的fragmentList是构造函数的参数
    this.titleList = titleList; } /** * 函数getItem根据int参数返回一个fragment,即一个View,作为当前页面 */ @Override public Fragment getItem(int arg0) { return (fragmentList == null || fragmentList.size() == 0) ? null : fragmentList.get(arg0);
                 //如果fragmentList为空或者size为0,则返回null,否则返回fragmentList中id为arg0的fragment }
    /** *函数getPageTitle根据int参数返回一个Stringt,作为当前标题 */ @Override public CharSequence getPageTitle(int position) { return (titleList.size() > position) ? titleList.get(position) : ""; } /** * 函数getCount自动返回一个int,即为fragmentList的元素个数,相当与数组的length */ @Override public int getCount() { return fragmentList == null ? 0 : fragmentList.size(); } } }

    (1)上面fragmentList.add(new ViewPagerFragment(R.layout.lay1))的部分相当于

    fragmentList.add(new fragment1());//fragment1是extends Fragment的类
    fragmentList.add(new fragment2());
    fragmentList.add(new fragment3());

    2、创建ViewPagerFragment以根据layout的布局文件返回View作为不同页面的fragment

    import android.annotation.SuppressLint;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    public class ViewPagerFragment1 extends Fragment {
         private int  lay;
         private TextView tv = null;
         //构造函数,layId为R.layout.lay1之类的
         public ViewPagerFragment1(int layId){
                super();
                this.lay = layId;
                }
        /**
         * 覆盖此函数,先通过inflater inflate函数得到view最后返回
         */
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
            View v = inflater.inflate(lay, container, false);
            return v;
        }
    }
  • 相关阅读:
    [SDOI2009]生日礼物(单调队列)
    [luogu1638]逛画展(单调队列)
    【最短路】·SPFA算法实现
    [UVA10474]大理石在哪儿
    【转载】C++中string erase函数的使用
    【转载】高精度减法的OP写法
    【转载】ST表
    串门赛: NOIP2016模拟赛——By Marvolo 丢脸记
    Bzoj 3813 奇数国 题解 数论+线段树+状压
    Bzoj 2064 分裂 题解
  • 原文地址:https://www.cnblogs.com/xingyyy/p/3278867.html
Copyright © 2011-2022 走看看