登录

android - 如何才能不重新创建 Fragment 视图?

大家先看图,红色部分是一个 Fragment,右上角的放大镜用来点击弹出一个搜索的 Activity。这样有一个问题,弹出搜索 Activity 之后,红色框内的 Fragment 就被销毁视图了,这样每次返回就会重新创建视图,无意义地耗费用户流量,降低用户体验。

所以想请问,怎么样才能不让 Fragment 重新创建视图?


今天早上继续找原因,并看了一下包裹这个 Fragment 的 Activity 的生命周期,发现了一点猫腻。
正常情况下如第二张生命周期图,弹出新的 Activity 之后原 Activity 会执行 onStop 方法,返回后会执行 onRestart、onStart,只有进程被杀的情况下才会再次执行 onCreate 方法。

而现在我发现,点击搜索弹出 Activity 之后返回,原 Activity 竟然执行的是 onCreate,Fragment 又因为是在这里初始化的,所以才导致 Fragment 每次都会被重建。所以现在的问题是,为什么原 Activity 不走右边的生命周期而走了左边的生命周期。继续摸索中。。。


问题解决了,说下原因,是之前那人写的搜索 Activity 有问题,因为他让其销毁的时候是重新启动一个主页 Activity!而不是 finish!天哪,完全无法理解他这么做的意图。。。

# Android
阿神阿神2140 天前448 次浏览

全部回复(4) 我要回复

  • 怪我咯

    怪我咯2017-04-17 15:27:11

    fragment.hide() -> fragment.show() 这样就不会重绘了吧~(是不是这样我忘了),即使再回调onCreateView(...),第一次绘制完的view保留,下次回调onCreateView(...)时,返回保留的那个View则可.

    例如:

    View rootView;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            super.onCreateView(inflater, container, savedInstanceState);
    
            if (rootView == null) {
                rootView = inflater.inflate(R.layout.fragment_social, null);
                initViews(rootView);
            }
            return rootView;
        }

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:27:11

    你是怎么实现的才会让打开新 activity时 fragment被销毁的呢?正常的使用我想不出有这种状况

    回复
    0
  • 怪我咯

    怪我咯2017-04-17 15:27:11

    可否多贴一些代码细节?
    正常情况下打开一个新的Activity,当前Activity的onStop方法会被回调,关联Fragment的onStop也会被回调,也就是说是前一个Activity应该是进入停止状态的,所以Fragment也应该处于停止状态而不应该被销毁。

    回复
    0
  • 迷茫

    迷茫2017-04-17 15:27:11

    我想看下跳转的代码。

    回复
    0
  • 取消回复发送