【问题标题】:Why onCreate is called twice when fire intent from current Activity?为什么从当前 Activity 触发意图时会调用两次 onCreate?
【发布时间】:2017-03-07 08:03:07
【问题描述】:

我正在开发一个模块,我需要在 YouTube 应用中打开 YouTube 视频。

我有一个主屏幕,滚动视图中有大量数据可用,当我向下滚动并单击任何视频时,意图被触发到另一个我以编程方式打开 YouTube 应用程序的活动。

现在的问题是,当我将意图从家庭活动触发到另一个具有 YouTube 应用逻辑以播放 YouTube 视频的活动时,视频开始以横向模式播放。但是当我完成 YouTube 应用程序时,我的主屏幕 oncreate() 再次被调用,因此我失去了主屏幕中滚动视图的 onscroll 位置。

当 onCreate 被调用两次时,我该如何处理这种情况?如何在主屏幕中保留滚动视图的滚动位置?

【问题讨论】:

  • 贴一些代码,。
  • 请编辑您的问题以包含一个最小的、完整的示例来说明问题。
  • oak,让我放一些代码
  • 您应该能够将一些 scrollOffset 值存储到 onSaveInstanceState
  • 为什么在您离开活动后调用onCreate 感到困惑?这是生命周期的一部分...developer.android.com/guide/components/images/…

标签: android android-scrollview android-orientation


【解决方案1】:

您不应与此行为混淆,因为这是正常的 Android Activity 生命周期。您是从 Activity A 调用 Activity B。现在,当从 B 回到 A 时,可能有两种情况 -

1) Activity A因内存不足被销毁,需要重新创建,因此再次调用onCreate()。

2) Activity A 没有被系统销毁,它还在内存中。在这种情况下,将调用 onResume()。

只有在activity被销毁的第一种情况下,你才会失去位置。

您可以将位置保存在 Bundle 中

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]);
            }
        });
}

【讨论】:

  • 如果您的问题解决了,请考虑采纳答案。
  • 感谢 Aritra 的回答,但仍然面临同样的问题。实际上它的屏幕方向给我带来了麻烦。
  • 但是你没有提到屏幕方向。即使是配置更改,如果您正确实施,您仍然可以使用此方法恢复滚动状态。
猜你喜欢
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
相关资源
最近更新 更多