我有ViewPager
FragmentStatePagerAdapter
,起始页应位于中间位置。但是当用户转到另一个Activity
然后返回时,应该保存页码,以便他返回到同一页面。可能有一种简单的方法可以完成这项工作,但我找不到解决方案。
通常会保存当前页码,所以这不是重点。问题是我不知道在哪里放置设置起始页面的代码,因为当我把它放在onCreate
时,即使我从返回,也会显示起始页面不同 Activity
。
我也尝试在onPause
方法中保存变量中的数字:
this.currentPageNumber = viewPager.getCurrentItem();
但下次调用onStart()
时,变量currentPageNumber
为null
,因此似乎onDestroy()
之后的变量未保存。
我可以使用静态变量,但感觉不对。有更好的解决方案吗?
编辑:抱歉,我没有说清楚,我想要保存的页面只能打开,如果我在启动它之后回到此活动。每次从启动器启动Activity
时,都应显示起始页面,而不是已保存的页面。
编辑2 :我想要的行为与Google日历应用在打开日期或周视角时的行为完全相同。如果我打开此应用程序,将显示当天。如果我滑到另一天,然后打开设置,然后按回来,这一天仍然显示。但如果我重新启动应用程序,今天将再次显示。
答案 0 :(得分:2)
初始化viewpager后,请使用以下方法:
viewPager.setCurrentItem(int position)
或者这个:
viewPager.setCurrentItem(int position, boolean withAnimation)
您可以使用SharedPreference
方法中的onPageSelect()
保存最后一个位置,您可以在其中获取每个页面的位置。您必须实现OnPageChangeListner
才能使用此方法。
修改强>
你的问题不清楚:
抱歉,也许我没有充分表达我的问题。我希望每次启动应用程序时都会显示起始页面。但是如果我通过后退按钮输入活动(例如,如果我打开我的设置活动然后返回),则应显示最后查看的页面。每次打开应用程序时,链接中提供的解决方案都将导致安全页面
我不知道你为什么要改变它,这是一种正常行为,请阅读this。
但是,如果您坚持,则可以始终在setCurrentItem()
的{{1}}中使用onResume
方法,因此在Activity/Fragment
恢复后,第一页将始终显示。
修改2
这仍然可以由Activity/Fragment
完成。在适配器中,尝试检测setCurrentItem
的{{1}}的{{1}}。创建一个从适配器外部返回该字段的方法。然后在初始化index
之后
page
适配器中的方法:
current day
答案 1 :(得分:1)
每当调用onCreate
主机ViewPager
的{{1}}并显示当前<时,我都要求显示默认页面所有其他案例的/ em>页面,包括激励案例:当用户从当前页面开始的Activity
导航回来时(在这种情况下将不会调用Activity
)。我的解决方案基于onCreate
和onCreate
之间的时间花费。
如果onResume
和onCreate
之间的时间较短,那么阈值(我使用1s假定onResume
可以在1s内完成,这是我们真正想要的良好编程习惯),然后我们认为这是第一次在onCreate
之后立即调用onStart
/ onResume
,否则我们认为这是关于所有其他情况,包括我们的激励案例。
然后我们只需要在onCreate
中设置当前时间戳,并在onCreate
中进行时间比较,以便决定将onResume
的当前项设置为默认值< / em>或当前。请注意,我们需要将ViewPager
中的当前页码保存在onPause
。
我并不是说这个想法很完美,但到目前为止我的工作正常。如果您对实施感兴趣,请告诉我,我会根据您的要求发布我的代码。
答案 2 :(得分:0)
我认为这可以解决您的问题,因为您第一次启动活动时没有保存实例(savedInstanceState)... 阅读帖子中的评论... Android :Save View Pager State ...