android - 如何才能不重新创建 Fragment 视图?
阿神
阿神 2017-04-17 15:25:11
0
4
793

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

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


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

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


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

阿神
阿神

闭关修行中......

全部回覆(4)
刘奇

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;
    }
大家讲道理

你是怎麼實現的才會讓打開新 activity時 fragment被銷毀的呢?正常的使用我想不出有這種狀況

刘奇

可否多貼一些程式碼細節?
正常情況下打開一個新的Activity,當前Activity的onStop方法會被回調,關聯Fragment的onStop也會被回調,也就是說是前一個Activity應該是進入停止狀態的,所以Fragment也應該處於停止狀態而不應該被銷毀。

迷茫

我想看下跳轉的程式碼。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板