разница между oncreateview и onviewcreated во фрагменте

<p>в чем принципиальная разница между этими двумя методами? когда я создаю textview, я должен использовать один поверх другого для производительности?</p><p>правка: в чем отличие от</p><pre><code>oncreateview() { root = some view view v = new view(some context); root.add(v); return root; } onviewcreated() { view v = new view(some context); getview().add(v); } </code></pre>

<p>мы сталкиваемся с некоторыми сбоями при инициализации представления в <code>oncreateview</code>.</p><blockquote> <p>вы должны надуть свой макет в <code>oncreateview</code>, но не должны инициализировать другие представления, используя <code>findviewbyid</code> в <code>oncreateview</code>. </p> </blockquote><p>потому что иногда представление не правильно инициализировано. поэтому всегда используйте <code>findviewbyid</code> в <code>onviewcreated</code> (когда представление полностью создано), и оно также передает представление в качестве параметра.</p><p><code>onviewcreated</code> - убедитесь, что представление полностью создано.</p>

<p><code>onviewcreated</code> вызывается сразу после <code>oncreateview</code> (метод, который вы инициализируете и создаете все ваши объекты, включая вашу <code>textview</code>), так что это не вопрос производительности.</p><p>с сайта разработчика:</p><blockquote> <p>onviewcreated (view view, bundle saveinstancestate)</p> <p>вызывается сразу после возврата oncreateview (layoutinflater, viewgroup, bundle), но до восстановления любого сохраненного состояния в представлении. это дает подклассам возможность инициализировать себя, как только они узнают, что их иерархия представления полностью создана. однако на этом этапе иерархия представления фрагмента не привязана к его родителю.</p> </blockquote><p>источник: <a href="https://developer.android.com/reference/android/support/v4/app/fragment#onviewcreated(android.view.view,%20android.os.bundle)">фрагмент # onviewcreated</a> </p>

<p>лучше сделать любое назначение подпредставлений для полей в <code>onviewcreated</code>. это связано с тем, что инфраструктура выполняет автоматическую проверку на нулевое значение, чтобы убедиться, что иерархия представления вашего фрагмента была создана и накачана (если используется файл макета xml) должным образом.</p><p>фрагмент кода из: <a href="https://github.com/android/platform\_frameworks\_base/blob/3f453164ec884d26a556477027b430cb22a9b7e3/core/java/android/app/fragmentmanager.java#l875">fragmentmanger.java</a> </p><pre><code>// this calls oncreateview() f.mview = f.performcreateview(f.getlayoutinflater(f.msavedfragmentstate), null, f.msavedfragmentstate); // null check avoids possible npes in onviewcreated // it's also safe to call getview() during or after onviewcreated() if (f.mview != null) { f.mview.setsavefromparentenabled(false); if (f.mhidden) f.mview.setvisibility(view.gone); f.onviewcreated(f.mview, f.msavedfragmentstate); } </code></pre>

<p><code>oncreateview</code> возвращает завышенное представление. <code>onviewcreated</code> вызывается сразу после <code>oncreateview</code> и параметр get имеет раздутое представление. тип возвращаемого значения: <code>void</code></p>

<p><code>oncreateview()</code> является фрагментом, эквивалентным <code>oncreate()</code> для операций и выполняется<strong> во время </strong>создания представления.<br> <code>onviewcreated()</code> запускается<strong> после </strong>вид создан.</p><p><code>should i use one over the other for performance?</code><strong>нет</strong>. там нет никаких свидетельств повышения производительности.</p><p>в framents тоже есть метод <code>oncreate()</code>.</p><p>но он<strong> редко </strong>используется (я делаю<strong> никогда </strong>не использую его, и не нахожу для него хорошего варианта использования).<br> я всегда использую <code>oncreateview()</code> во фрагментах вместо <code>oncreate()</code>.<br> и я доволен этим.</p>

<p>я думаю, что основное различие между ними заключается в том, что когда вы используете kotlin.in<strong> oncreateview () </strong>каждый раз, когда вы хотите получить доступ к просмотру в своем xml-файле, вы должны использовать<strong> findviewbyid </strong>но в<strong> onviewcreated </strong>вы можете просто получите доступ к своему виду, просто позвонив по его идентификатору. </p>

<p>oncreateview используется во фрагменте для создания макета и представления с раздувом . onviewcreated используется для ссылки на представление, созданное вышеуказанным методом . наконец, рекомендуется определить прослушиватель действия в onactivitycreated. </p>

<p>основная причина, по которой я бы использовал <code>onviewcreated</code>, состоит в том, что она отделяет любую логику инициализации от логики инфляции/создания иерархии представления, которая должна идти в <code>onviewcreate</code>. все остальные характеристики производительности выглядят одинаково.</p>