ViewPager和Fragment的使用

原创 2016年06月01日 11:28:44

小案例

XML中

<android.support.v4.view.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</android.support.v4.view.ViewPager>

创建Fragment

 fragments = new ArrayList<>();
 ConversationFragment fragment1 = new ConversationFragment();
 GroupFragment fragment2 = new GroupFragment();
 SearchFragment fragment3 = new SearchFragment();
 fragments.add(fragment1);
 fragments.add(fragment2);
 fragments.add(fragment3);
 adapter = new MainPagerAdapter(getSupportFragmentManager(), fragments);
 viewPager.setAdapter(adapter);

adapter

public class MainPagerAdapter extends FragmentPagerAdapter{

    List<Fragment> fragmentList;

    public MainPagerAdapter(FragmentManager fm, List<Fragment> fragmentList) {
        super(fm);
        this.fragmentList = fragmentList;
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }
}

OnPageChangeListener

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        int distance = positionOffsetPixels / 3;
        //一旦fragment滑动,这里的position实际是前一个的
        ViewPropertyAnimator.animate(v_indicate_line).translationX(distance + position * v_indicate_line.getWidth()).setDuration(0);
    }

    @Override
    public void onPageSelected(int position) {
        textLightAndSize();
    }


    @Override
    public void onPageScrollStateChanged(int state) {

    }
});

配合其他点击事件

//这里是注意setCurrentItem的用法
switch (view.getId()) {
    case R.id.ly_conversation:
        viewPager.setCurrentItem(0);
        break;
    case R.id.ly_group:
        viewPager.setCurrentItem(1);
        break;
    case R.id.ly_search:
        viewPager.setCurrentItem(2);
        break;
}

官方案例

R.layout.fragment_pager

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:padding="4dip"
        android:gravity="center_horizontal"
        android:layout_width="match_parent" android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="0px"
            android:layout_weight="1">
    </android.support.v4.view.ViewPager>

    <LinearLayout android:orientation="horizontal"
            android:gravity="center" android:measureWithLargestChild="true"
            android:layout_width="match_parent" android:layout_height="wrap_content"
            android:layout_weight="0">
        <Button android:id="@+id/goto_first"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:text="@string/first">
        </Button>
        <Button android:id="@+id/goto_last"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:text="@string/last">
        </Button>
    </LinearLayout>
</LinearLayout>

R.layout.fragment_pager_list

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:drawable/gallery_thumb">

    <TextView android:id="@+id/text"
        android:layout_width="match_parent" android:layout_height="wrap_content"
        android:gravity="center_vertical|center_horizontal"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="@string/hello_world"/>

    <!-- The frame layout is here since we will be showing either
    the empty view or the list view.  -->
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" >
        <!-- Here is the list. Since we are using a ListActivity, we
             have to call it "@android:id/list" so ListActivity will
             find it -->
        <ListView android:id="@android:id/list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:drawSelectorOnTop="false"/>

        <!-- Here is the view to show if the list is emtpy -->
        <TextView android:id="@android:id/empty"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="No items."/>

    </FrameLayout>

</LinearLayout>
public class FragmentPagerSupport extends FragmentActivity {
    static final int NUM_ITEMS = 10;

    MyAdapter mAdapter;

    ViewPager mPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_pager);

        mAdapter = new MyAdapter(getSupportFragmentManager());

        mPager = (ViewPager)findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);

        // Watch for button clicks.
        Button button = (Button)findViewById(R.id.goto_first);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mPager.setCurrentItem(0);
            }
        });
        button = (Button)findViewById(R.id.goto_last);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mPager.setCurrentItem(NUM_ITEMS-1);
            }
        });
    }

    public static class MyAdapter extends FragmentPagerAdapter {
        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return NUM_ITEMS;
        }

        @Override
        public Fragment getItem(int position) {
            return ArrayListFragment.newInstance(position);
        }
    }

    public static class ArrayListFragment extends ListFragment {
        int mNum;

        /**
         * Create a new instance of CountingFragment, providing "num"
         * as an argument.
         */
        static ArrayListFragment newInstance(int num) {
            ArrayListFragment f = new ArrayListFragment();

            // Supply num input as an argument.
            Bundle args = new Bundle();
            args.putInt("num", num);
            f.setArguments(args);

            return f;
        }

        /**
         * When creating, retrieve this instance's number from its arguments.
         */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mNum = getArguments() != null ? getArguments().getInt("num") : 1;
        }

        /**
         * The Fragment's UI is just a simple text view showing its
         * instance number.
         */
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.fragment_pager_list, container, false);
            View tv = v.findViewById(R.id.text);
            ((TextView)tv).setText("Fragment #" + mNum);
            return v;
        }

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            setListAdapter(new ArrayAdapter<String>(getActivity(),
                    android.R.layout.simple_list_item_1, Cheeses.sCheeseStrings));
        }

        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
            Log.i("FragmentList", "Item clicked: " + id);
        }
    }
}

注意

3.0之前的Activity是不能用fragment的。为了能使用fragment(supportV4中),才有了FragmentActivity。FragmentActivity继承的Activity。

版权声明:本文为博主原创文章,未经博主允许不得转载。

ViewPager和Fragment的组合使用

今天想看TabHost相关信息的时候,提示建议使用Fragment代替,然后就高出了下面的...
  • u013758734
  • u013758734
  • 2014年06月10日 16:11
  • 3236

Android - Fragment+ViewPager结合使用

这篇作为详细回顾Fragment的最后一篇。 第一篇:http://blog.csdn.net/u014470702/article/details/48139579 为什么使用Fragment,F...
  • u014470702
  • u014470702
  • 2015年09月04日 09:33
  • 1287

ViewPager和Fragment配合使用,以及它的Fragment生命周期分析

首先需要一个FragmentPagerAdapter。这个是Andbase下封装的一个Adapter源码。public class AbFragmentPagerAdapter extends Fra...
  • kongxiuqi
  • kongxiuqi
  • 2016年05月03日 14:18
  • 887

ViewPager(2):ViewPager与Fragment一起使用

FragmentPagerAdapterFragmentPagerAdapter继承自PagerAdapter ,主要用来展示多个Fragment页面,并且每一个Fragment都会被保存在Fragm...
  • lj2012sy
  • lj2012sy
  • 2016年06月17日 10:36
  • 880

Android项目ViewPager+Fragment的基本使用

Android项目ViewPager+Fragment的简单使用
  • Jsagacity
  • Jsagacity
  • 2017年04月23日 09:58
  • 3026

android中 Fragment中的viewpager

在写viewpager之前看过很多网上的资料,csdn和github
  • Justbroken
  • Justbroken
  • 2014年09月23日 14:02
  • 4266

Android的ViewPager,ViewPager配合Fragment的用法

MainActivity.java package com.hust.viewpaper; import java.util.ArrayList; import android.app.Acti...
  • tuke_tuke
  • tuke_tuke
  • 2016年05月29日 10:27
  • 642

使用ViewPager时,系统的Fragment 和支持包v4的Fragment二者传递对象不兼容

import android.app.Fragment;和import android.support.v4.app.Fragment;  两种Fragment的实现不一样,二者传递对象不兼容。 Vi...
  • Buaaroid
  • Buaaroid
  • 2015年08月14日 12:29
  • 3032

Android中Fragment和ViewPager那点事儿(仿微信APP)

在之前的博文《Android中使用ViewPager实现屏幕页面切换和引导页效果实现》和《Android中Fragment的两种创建方式》以及《Android中Fragment与Activity之间的...
  • panhouye
  • panhouye
  • 2016年12月25日 01:17
  • 1002

ViewPager 详解(五)-----使用Fragment实现ViewPager滑动

前言:前几篇yy
  • harvic880925
  • harvic880925
  • 2014年08月18日 15:03
  • 95787
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ViewPager和Fragment的使用
举报原因:
原因补充:

(最多只允许输入30个字)