我正在制作一个模块,我需要在YouTube应用中打开YouTube视频。
我有一个主屏幕,滚动视图中有大量数据可用,当我向下滚动并点击任何视频时,意图被激发到我以编程方式打开YouTube应用程序的另一个活动。
现在的问题是,当我将家庭活动的意图发送到另一个具有YouTube应用逻辑来播放YouTube视频的活动时,视频开始以横向模式播放。但是当我完成YouTube应用程序时,我的主屏幕oncreate()再次被调用,因此我在主屏幕中丢失了我的滚动视图的滚动位置。
当onCreate被调用两次时如何处理这种情况?如何在主屏幕中保留scrollview的滚动位置?
答案 0 :(得分:2)
您不应该对此行为感到困惑,因为这是正常的Android活动生命周期。您正在从活动A调用活动B.现在,当从B回到A时,可能有两种情况 -
1)由于内存不足而导致活动A被销毁,需要再次创建,因此再次调用onCreate()。
2)系统没有销毁活动A ,它仍在内存中。在这种情况下,将调用onResume()。
只有在活动被销毁时的第一种情况下,您才会失去位置。
您可以保存套装中的位置,
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putIntArray("SCROLL_POSITION",
new int[]{ mScrollView.getScrollX(), mScrollView.getScrollY()});
}
再次恢复,
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
final int[] position = savedInstanceState.getIntArray("SCROLL_POSITION");
if(position != null)
mScrollView.post(new Runnable() {
public void run() {
mScrollView.scrollTo(position[0], position[1]);
}
});
}