我正在工作一个模块,我需要在YouTube应用中打开YouTube视频。
我有一个主屏幕,在滚动浏览中有大量数据,当我向下滚动并单击任何视频时,就会将意图发射到我以编程方式打开YouTube应用程序的另一个活动。
。现在,问题是我从家庭活动开火的那一刻,到另一个具有YouTube App Logic播放YouTube视频的活动,视频开始在景观模式下播放。但是,当我完成YouTube应用程序时,我的主屏幕increate()再次被调用,因此我在主屏幕上失去了滚动的滚动位置。
当ongreate被调用两次时,我该如何处理这种情况,如何在主屏幕中保留滚动的滚动位置?
您不应将这种行为混淆,因为这是普通的Android活动生命周期。您正在调用活动A的活动B。现在,从B回到A时,可能会有两种情况 -
1)由于缺乏内存,活动A被破坏了,需要再次创建它,因此再次调用ongreate()。
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]);
}
});
}