我正在使用ViewPager在我的Android应用程序中实现滑动。但是,我希望在用户使用后退按钮而不是结束活动时显示上一个片段。有没有办法做到这一点? 感谢 塞巴斯蒂安与ViewPager一起使用backstack
回答
覆盖你Activity
的功能:
public class Activity extends Activity
{
@Override
public void onBackPressed()
{
// do stuff
myFragment.onBackPressed();
}
}
public class Fragment extends Fragment
{
public void onBackPressed()
{
// do stuff
}
}
我也有类似的问题,这是我如何解决它。我有一个ViewPager 6片段,并希望跟踪页面历史记录,并能够使用后退按钮在历史中向后导航。我创建一个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;
}
};
我有同样的问题,我按照此步骤(编辑我的回答---我当然工作,试试看)
在主要活动在viewpager中有3个片段,我创建堆栈 和推送和弹出数据。
private Stack<Integer> stackkk;
private ViewPager mPager;
private int tabPosition = 0;
mTabLayout.setupWithViewPager(mPager);
mPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));
mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
tabPosition = tab.getPosition();
mPager.setCurrentItem(tab.getPosition());
// here i have add the data into the stack in each tab click, as at first it will always be null so i add 0 position
if (stackkk.empty())
stackkk.push(0);
if (stackkk.contains(tabPosition)) {
stackkk.remove(stackkk.indexOf(tabPosition));
stackkk.push(tabPosition);
} else {
stackkk.push(tabPosition);
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
tabPositionUnselected = tab.getPosition();
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
,并在onBackPressed的活动,
//OnbackPress i have first taken out the last one as it already and
//selected by poping it out then only set to the pager.
@Override
public void onBackPressed() {
if (stackkk.size() > 1) {
stackkk.pop();
mPager.setCurrentItem(stackkk.lastElement());
} else {
}
}
希望这可以帮助或消息我。
尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 –
@JaiprakashSoni谢谢你的建议。我编辑了我的答案。希望这可以帮助其他人 –
- 1. Viewpager更新和backstack
- 2. 与ViewPager和PagerTitleStrip一起使用AdView
- 3. 无法将TouchImageView与ViewPager一起使用
- 4. 如何将ViewPager与CursorLoader一起使用?
- 5. 将findFragmentById与ViewPager一起使用
- 6. Android - 在ViewPager中替换片段的Backstack
- 7. 在viewpager中使用backstack和后退按钮
- 8. NestedScrollView无法与ViewPager中的RecyclerView一起使用
- 9. CollapsingToolbarLayout不能与ViewPager和WebView一起使用
- 10. 如何在Android中将Viewpagerindicator与ViewPager一起使用?
- 11. 使用ViewPager与ActionsContentView
- 12. 使用PageContainer的ViewPager旋转木马不能与FragmentPagerAdapter一起使用
- 13. 一起控制两个ViewPager
- 14. 使用ViewPager与ListFragment和CursorAdapter
- 15. 使用viewPager与片段android?
- 16. 使用Android的SlidingPaneLayout与ViewPager
- 17. 使用Viewpager与NavigationDrawer导致
- 18. 使用片段与ViewPager
- 19. ViewPager与MediaPlayer的使用
- 20. 如何使用android Fragment backstack?
- 21. -forwardInvocation与Clang-LLVM一起使用,但不与GCC一起使用
- 22. 当ViewPager中的片段被保留时,WebView重新加载BackStack
- 23. 替换的ViewPager和BackStack的生命周期?
- 24. Android ViewPager在从backStack返回片段后无法正常显示
- 25. ViewPager OnPageChangeListener不起作用
- 26. Viewpager在DialogFragment不起作用
- 27. Android ViewPager getCurrentItem()不起作用
- 28. 与Kinect一起使用System.Speech
- 29. 与HTTPS一起使用javax.xml.ws.Endpoint
- 30. 与Eclemma一起使用Jmockit
完美,非常感谢! – Sebastian