我正在使用 ViewPager 在我的 Android 应用程序中实现滑动。但是,我希望当用户使用后退按钮而不是结束活动时显示前一个片段。有什么办法可以做到这一点吗?
谢谢
塞巴斯蒂安
我有类似的问题,这就是我解决的方法。我有一个包含 6 个片段的 ViewPager,想要跟踪页面历史记录并能够使用后退按钮在历史记录中向后导航。我创建一个java.util.Stack<Integer>
对象,向其添加片段编号(除非您使用后退按钮,请参见下文),然后覆盖onBackPressed()
当我的历史堆栈不为空时,使其弹出最后查看的片段而不是使用返回堆栈。
您希望避免在按下后退按钮时将元素推送到堆栈上,否则如果继续使用后退按钮,您将陷入两个片段之间,而不是最终退出。
My code:
MyAdapter mAdapter;
ViewPager mPager;
Stack<Integer> pageHistory;
int currentPage;
boolean saveToHistory;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager)findViewById(R.id.container);
mPager.setAdapter(mAdapter);
mPager.setOffscreenPageLimit(5);
pageHistory = new Stack<Integer>();
mPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
if(saveToHistory)
pageHistory.push(Integer.valueOf(currentPage));
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
saveToHistory = true;
}
@Override
public void onBackPressed() {
if(pageHistory.empty())
super.onBackPressed();
else {
saveToHistory = false;
mPager.setCurrentItem(pageHistory.pop().intValue());
saveToHistory = true;
}
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)