Android ViewPager: 保存当前page在最上面

在Android开发中,ViewPager是一个常用的控件,用于实现页面之间的滑动切换。有时候,我们可能需要保存用户当前所在的页面,以便在应用重新启动后能够恢复到之前的位置。本文将介绍如何使用ViewPager来保存当前页面,并在最上面显示。

ViewPager简介

ViewPager是Android支持库中的一个控件,用于显示可滑动的页面集合。它通常与Fragment一起使用,每个页面对应一个Fragment,通过滑动屏幕可以切换不同的页面。

在使用ViewPager时,我们需要创建一个PagerAdapter来提供ViewPager所需的页面数据。PagerAdapter的主要任务是实例化页面,并在页面之间进行切换。同时,PagerAdapter还需要管理页面的保存和恢复状态。

保存当前页面

为了保存用户当前所在的页面,我们需要在应用关闭时记录当前页面的位置,并在应用重新启动时恢复到该位置。下面是一种实现方式:

public class MainActivity extends AppCompatActivity {

    private ViewPager viewPager;
    private int currentPosition = 0;

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

        viewPager = findViewById(R.id.viewPager);
        viewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                
            }

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

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("currentPosition", currentPosition);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        currentPosition = savedInstanceState.getInt("currentPosition");
        viewPager.setCurrentItem(currentPosition);
    }
}

class MyPagerAdapter extends FragmentPagerAdapter {

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

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

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

class MyFragment extends Fragment {

    public static MyFragment newInstance(int position) {
        MyFragment fragment = new MyFragment();
        Bundle args = new Bundle();
        args.putInt("position", position);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_my, container, false);
        TextView textView = view.findViewById(R.id.textView);
        int position = getArguments().getInt("position");
        textView.setText("Page " + position);
        return view;
    }
}

在上述代码中,我们在MainActivity中使用ViewPager来显示页面,并在onCreate方法中设置ViewPager的适配器。适配器MyPagerAdapter是一个继承自FragmentPagerAdapter的自定义类,用于提供ViewPager所需的页面数据。

在ViewPager的addOnPageChangeListener方法中,我们监听页面的滑动事件,并在onPageSelected方法中记录当前页面的位置。

为了保存当前页面的位置,在MainActivity的onSaveInstanceState方法中,我们将当前位置currentPosition保存到Bundle中。

在MainActivity的onRestoreInstanceState方法中,我们从Bundle中恢复之前保存的当前位置,并使用ViewPager的setCurrentItem方法将ViewPager滑动到该位置。

这样,当应用重新启动时,ViewPager将自动滑动到之前用户所在的页面。

结语

在本文中,我们介绍了如何使用ViewPager来保存用户当前所在的页面,并在应用重新启动后恢复到该位置。这对于一些需要记住用户浏览位置的应用非常有用。希望本文能够帮助你理解和使用ViewPager保存当前页面的方法。

参考文献

  1. [ViewPager | Android Developers](