ViewPager With FragmentPagerAdapter

采用PagerAdapter中的FragmentPagerAdapter来实现页面切换,适用于a handful of typically more static fragments to be paged through

1.Layout ViewPager

<?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/vpPager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <!-- PagerTabStrip automatically display the page indicator for your pager -->
        <android.support.v4.view.PagerTabStrip
        android:id="@+id/pager_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:paddingBottom="4dp"
        android:paddingTop="4dp" />

    </android.support.v4.view.ViewPager>
</LinearLayout>

2.Define Fragments

FirstFragment is like SecondFragment

 1 package com.example.fragmentpagerdemo;
 2
 3 import android.os.Bundle;
 4 import android.support.v4.app.Fragment;
 5 import android.view.LayoutInflater;
 6 import android.view.View;
 7 import android.view.ViewGroup;
 8 import android.widget.TextView;
 9
10 public class FirstFragment extends Fragment{
11
12     //Store instance variables
13     private String title;
14     private int page;
15
16     /**
17      * 每一个fragment实例都可以附带一个bundle对象: bundle-->(key-value)
18      * @param title
19      * @param page
20      * @return
21      */
22     //newInstance constructor for creating fragment with arguments
23     public static FirstFragment newsInstance(String title, int page)
24     {
25         //首先创建fragment实例
26         FirstFragment fragment = new FirstFragment();
27         //创建bundle对象
28         Bundle bundle = new Bundle();
29         //向该bundle对象中添加参数
30         bundle.putInt("page", page);
31         bundle.putString("title", title);
32         //将bundle附加给fragment
33         fragment.setArguments(bundle);
34         return fragment;
35     }
36     // Store instance variables based on arguments passed
37     @Override
38     public void onCreate(Bundle savedInstanceState) {
39         //
40         super.onCreate(savedInstanceState);
41         page = getArguments().getInt("page", 0);
42         title = getArguments().getString("title", null);
43     }
44
45     @Override
46     public View onCreateView(LayoutInflater inflater, ViewGroup container,
47             Bundle savedInstanceState) {
48         //
49         View view = inflater.inflate(R.layout.first_fragment, container, false);
50         TextView text = (TextView) view.findViewById(R.id.textView);
51         text.setText(page + "--" + title);
52         return view;
53     }
54
55
56
57
58 }

3.MainActivity

 1 package com.example.fragmentpagerdemo;
 2
 3 import android.annotation.SuppressLint;
 4 import android.os.Bundle;
 5 import android.support.v4.app.Fragment;
 6 import android.support.v4.app.FragmentActivity;
 7 import android.support.v4.app.FragmentManager;
 8 import android.support.v4.app.FragmentPagerAdapter;
 9 import android.support.v4.view.ViewPager;
10 import android.support.v4.view.ViewPager.OnPageChangeListener;
11 import android.widget.Toast;
12
13 public class MainActivity extends FragmentActivity{
14     FragmentPagerAdapter adapterViewPager;
15     ViewPager vpPager;
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20
21         vpPager = (ViewPager) findViewById(R.id.vpPager);
22         adapterViewPager = new MyPagerAdapter(getSupportFragmentManager());
23         vpPager.setAdapter(adapterViewPager);
24         //setup OnPageChangeListener
25         vpPager.setOnPageChangeListener(new OnPageChangeListener()
26         {
27
28             // Called when the scroll state changes:
29             // SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
30             @Override
31             public void onPageScrollStateChanged(int arg0) {
32                 //
33
34             }
35             // This method will be invoked when the current page is scrolled
36             @Override
37             public void onPageScrolled(int arg0, float arg1, int arg2) {
38                 //
39
40             }
41             // This method will be invoked when a new page becomes selected.
42             @SuppressLint("ShowToast")
43             @Override
44             public void onPageSelected(int arg0) {
45                 //
46                 System.out.println("The page is cahnged to:" + vpPager.getCurrentItem());
47 //                Toast.makeText(this, "The page is changed to:" + vpPager.getCurrentItem(), Toast.LENGTH_LONG);
48             }
49         });
50     }
51     public static class MyPagerAdapter extends FragmentPagerAdapter
52     {
53         private static int NUM_ITEMS = 3;
54         public MyPagerAdapter(FragmentManager fm) {
55             super(fm);
56         }
57         @Override
58         public Fragment getItem(int position) {
59             //
60             switch(position)
61             {
62             case 0:
63                 return FirstFragment.newsInstance("Page @ 1", 0);
64             case 1:
65                 return FirstFragment.newsInstance("Page @ 2", 1);
66             case 2:
67                 return SecondFragment.newsInstance("Page @ 3", 2);
68             default:
69                 return null;
70             }
71         }
72         @Override
73         public int getCount() {
74             //
75             return NUM_ITEMS;
76         }
77          // Returns the page title for the top indicator
78         @Override
79         public CharSequence getPageTitle(int position) {
80             //
81             return "Page" + position;
82         }
83     }
84 }

时间: 2025-01-13 16:12:12

ViewPager With FragmentPagerAdapter的相关文章

使用ViewPager和FragmentPagerAdapter实现Tab

前面我们分别利用ViewPager和Fragment实现了Tab效果.但是使用Fragment实现的Tab不能够左右滑动.如果我们既想使用Fragment又想让Tab能够滑动,那么怎么办呢?这 就是今天的方法,利用ViewPager和FragmentPagerAdapter来实现Tab. 没看过前两篇文章的读者可以点击下面的地址: http://www.cnblogs.com/fuly550871915/p/4850056.html 废话不多说了,效果还是之前的效果.由于有些代码我们已经写过了.

Android实战简易教程-第三十四枪(基于ViewPager和FragmentPagerAdapter实现滑动通用Tab)

上一段时间写过一篇文章<基于ViewPager实现微信页面切换效果> 里面实现了类似微信Tab的页面,但是这种实现方法有个问题,就是以后所有的代码逻辑都必须在MainActivity中实现,这样就造成MainActivity文件非常臃肿,不利于代码管理. 下面我们基于ViewPager和FragmentPagerAdapter实现滑动通用Tab. 布局文件基本和上篇文章一致. 1.top.xml: <?xml version="1.0" encoding="

Fragment嵌套带来的坑--页面点击无反应(顺带ViewPager之 FragmentPagerAdapter简单分析)

接手别人的老项目.新版本测试提出一个bug: 点击Home最小化的应用->系统设置界面 改变字体后->点击进入应用->3个由viewpager 的fragmentadapter管理的 tab页面点击都没反应. 这是一个比较蛋疼的bug,猜想了很多原因,都不对. 项目的结构是 activity 内有mainfragment,mainfragment又 包含viewpager,viewpager 使用FragmentPagerAdapter 管理3个页面.所以是 activity套2层fra

ViewPager和FragmentPagerAdapter

该代码来源于 慕课 网 学习视频: MainActivity.class package com.imooc.tab03; 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.

ViewPager+RadioButton+FragmentPagerAdapter实现导航fragment生命周期分析

(1)刚开始进来: 01-21 03:18:16.264: I/DD(1736): DoorManagerFragment======onAttach====== 01-21 03:18:16.264: I/DD(1736): DoorManagerFragment======onCreate====== 01-21 03:18:16.268: I/DD(1736): DoorManagerFragment======onCreateView====== 01-21 03:18:16.272:

Tab系列 03 FragmentPagerAdapter + Fragment + ViewPager

使用ViewPager + Fragment  + FragmentPagerAdapter 实现tab内容切换 创建一个Activity继承FragmentActivity 适配器: FragmentPagerAdapter 与tab系列01 ViewPager + xml 的区别, ViewPager + Fragment 的区别 Adapter 加载数据 package com.example.tabdemo01; import java.util.ArrayList; import ja

FragmentPagerAdapter与FragmentStatePagerAdapter差异

平常使用的FragmentPagerAdapter和FragmentStatePagerAdapter来自android.support.v4.app包用来构建ViewPager.FragmentPagerAdapter更多的用于少量界面的ViewPager,比如Tab.划过的fragment会保存在内存中,尽管已经划过.而FragmentStatePagerAdapter和ListView有点类似,会保存当前界面,以及下一个界面和上一个界面(如果有),最多保存3个,其他会被销毁掉.要注意的是F

ViewPager+Fragment实现滑动显示,且Fragment里面又放Fragment+viewPager

思路:新建一个Activity,且这个Activity要继承FragementActivity,在Activity的布局文件中放入了一个viewPager,为了效果好看,还做了个导航,使得ViewPager和导航栏能够实现联动.代码里面有解释,我就不详细介绍了!! 在往ViewPager放Fragment的时候,用到的适配器应该是FragmentPagerAdapter 导航栏的制作我是用了一个ImageView+TextView,若这时使用Imageview(或TextView)实现点击事件的

我来谈谈ViewPager搭配FragmentAdapter的数据丢失问题

先来一张碎片Fragment的生命周期图开开胃...... 首先呢,我来介绍一下: 当我们使用Viewpager搭配FragmentPagerAdapter进行滑动的时候,某些情况下会发现前边几页自己手动产生的数据会被清空掉,对于这个碎片的滑动: 它的出现和消失只是和Activity一样,是一个是否在栈顶的关系,当非栈顶碎片出现再栈顶的时候,它就会从碎片的onCreateView这个生命周期开始走到onDestroyView之前,如果你把adapter这种装数据的对象放在了onCreateVie