Android viewPager+FragmentPagerAdapter学习

接下来学习 viewPager+FragmentPagerAdapter 实现切屏 效果

1.定义 Fragemnt 的 页面内容

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/test_text"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

2.实现自定义的 Fragment

public class TestFragment extends Fragment {

    private TextView textView = null;
    private String string = null;
    public TestFragment() {
        super();
    }

    public TextView getTextView() {
        return textView;
    }

    public void setTextView(String str){
        this.string = str;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //return super.onCreateView(inflater, container, savedInstanceState);

        View view = inflater.inflate(R.layout.activity_fragment,container,false);
        textView = (TextView)view.findViewById(R.id.test_text);
        textView.setText(string);
        return  view;
    }
}

inflate 的自我理解,没有查档案 inflate(view样式,view所在的容器,是否是根容器)

3.实现 自定义的 MyFramentAdapter

public class MyFramentAdapter extends FragmentPagerAdapter {

    private ArrayList<TestFragment> arrayList = null;

    public MyFramentAdapter(FragmentManager fm, ArrayList<TestFragment> arrayList) {
        super(fm);
        this.arrayList = arrayList;
    }

    @Override
    public Fragment getItem(int position) {
        //return null;
        return  arrayList.get(position);
    }

    @Override
    public int getCount() {
       // return 0;
        return arrayList.size();
    }
}

4.MainActivity 实现

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

        viewPager = (ViewPager)findViewById(R.id.myViewPager);
        list = new ArrayList<TestFragment>();
        TestFragment one_fragment = new TestFragment();
        one_fragment.setTextView("one_fragment");
        list.add(one_fragment);
        TestFragment two_fragment = new TestFragment();
        two_fragment.setTextView("two_fragment");
        list.add(two_fragment);
        TestFragment three_fragemnt = new TestFragment();
        three_fragemnt.setTextView("three_fragemnt");
        list.add(three_fragemnt);
        myFramentAdapter = new MyFramentAdapter(getSupportFragmentManager(),list);
        viewPager.setAdapter(myFramentAdapter);
    }

这些适配器实现等 都可以参照 listview的实现过程

 viewPager.setCurrentItem(2);

setCurrentItem 可以直接显示要展示的view

viewPager.OnPageChangeListener{
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels);  
    public void onPageSelected(int position);  
    public void onPageScrollStateChanged(int state);  
}

实际开发中ViewPager有两个操作:
1.一个是用手指滑动翻页
2.一个是直接setCurrentItem(一般用于点击上面的tab直接setCurrentItem)

三个函数讲解
1.onPageSelected(int position):
本方法参数 position 代表哪个页面被选中。
手指滑动翻页,如果翻动成功了(滑动的距离够长),手指抬起来就会立即执行这个方法,position就是当前滑动到的页面。
通过setCurrentItem翻页,则position会和setCurrentItem的参数一致,该情况在onPageScrolled方法前立即执行。

2.onPageScrolled(int position,float positionOffset, int positionOffsetPixels):
本方法会在屏幕滚动过程中不断被调用。

3.onPageScrollStateChanged(int state):
本方法在手指操作屏幕的时候发生变化。有三个值:0(END),1(PRESS) , 2(UP) 。
当用手指滑动翻页时,手指按下去的时候会触发这个方法,state值为1,
手指抬起时,如果发生了滑动(即使很小),这个值会变为2,然后最后变为0 。总共执行这个方法三次。

特殊情况:手指按下去以后一点滑动也没有发生,这个时候只会调用这个方法两次,state值分别是1,0 。
当setCurrentItem翻页时,会执行这个方法两次,state值分别为2 , 0 。

用手指拖动翻页时的执行顺序:
1.先执行一遍onPageScrollStateChanged,
2.然后不断执行onPageScrolled,放手指的时候,直接立即执行一次onPageScrollStateChanged,然后立即执行一次onPageSelected,然后再不断执行onPageScrollStateChanged
3.最后执行一次onPageScrollStateChanged。

参考内容:
https://www.cnblogs.com/android-blogs/p/5524172.html
https://blog.csdn.net/xieluoxixi/article/details/54983525

推荐一篇文章:
http://www.apkbus.com/android-90417-1-1.html


版权声明:本文为shiluohuashengmi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。