Seb*_*ian 8 android android-viewpager back-stack
我正在使用ViewPager在我的Android应用程序中实现滑动.但是,我想在用户使用后退按钮而不是结束活动时显示前一个片段.有没有办法做到这一点?谢谢塞巴斯蒂安
在 Fragment Activity 中覆盖以下方法应该可以解决您的问题。
@Override
public void onBackPressed() {
if (mViewPager.getCurrentItem() == 0) {
// If the user is currently looking at the first step, allow the system to handle the
// Back button. This calls finish() on this activity and pops the back stack.
super.onBackPressed();
} else {
// Otherwise, select the previous step.
mViewPager.setCurrentItem(mViewPager.getCurrentItem() - 1);
}
}
Run Code Online (Sandbox Code Playgroud)
覆盖您的功能Activity:
public class Activity extends Activity
{
@Override
public void onBackPressed()
{
// do stuff
myFragment.onBackPressed();
}
}
public class Fragment extends Fragment
{
public void onBackPressed()
{
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到了类似的问题,这就是我解决它的方法.我有一个包含6个片段的ViewPager,想要跟踪页面历史记录,并能够使用后退按钮在历史记录中向后导航.我创建了一个java.util.Stack<Integer>对象,向它添加片段编号(除非你使用后退按钮,见下文),并覆盖onBackPressed()以使其弹出最后查看的片段而不是使用后台堆栈,当我的历史堆栈不为空时.
当您按下后退按钮时,您希望避免在堆栈上推送元素,否则如果继续使用后退按钮而不是最终退出,则会卡在两个片段之间.
我的代码:
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;
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7541 次 |
| 最近记录: |