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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A ViewPager is a layout manager that allows the user to swipe left and right to move between pages of data. In the case of a Fragment-based ViewPager, each page is represented by a Fragment. To use a ViewPager with Fragments, you need to do the following: 1. Create a layout file that contains a ViewPager element. 2. Create a Fragment class that will represent a single page in the ViewPager. This class should inflate a layout that contains any UI elements you want to display on the page. 3. Create an adapter class that extends FragmentPagerAdapter or FragmentStatePagerAdapter. This adapter will be responsible for creating and managing the Fragments that are displayed in the ViewPager. 4. Set the adapter on the ViewPager. Here's an example of how to create a Fragment-based ViewPager: 1. Create a layout file that contains a ViewPager element. For example: ``` <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. Create a Fragment class that will represent a single page in the ViewPager. For example: ``` public class MyFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_my, container, false); // TODO: Set up UI elements in the layout return view; } } ``` 3. Create an adapter class that extends FragmentPagerAdapter or FragmentStatePagerAdapter. For example: ``` public class MyPagerAdapter extends FragmentPagerAdapter { public MyPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { // TODO: Return a new instance of MyFragment for the given position return null; } @Override public int getCount() { // TODO: Return the total number of pages return 0; } } ``` 4. Set the adapter on the ViewPager in your Activity or Fragment. For example: ``` ViewPager viewPager = findViewById(R.id.view_pager); MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(adapter); ``` That's it! You should now have a functioning Fragment-based ViewPager. Of course, you'll need to fill in the TODOs in the code snippets above to actually display content on the pages.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值