Измените файлы макета в одном и том же действии

Я использую setContentView(R.layout.main) для переключения представлений в одну и ту же активность. Я вызываю некоторую асинхронную задачу и setContentView(R.layout.main) данные в главном файле макета после этого, я меняю вид, вызывая setContentView(R.layout.main) .

Я узнал, что мы не должны использовать метод setContentView несколько раз для такой же активности. Хотя он отлично работает для меня.

Может ли кто-нибудь объяснить, почему мы не должны использовать метод setContentView несколько раз для одной и той же активности для изменения представлений?

Будет ли он создавать любые связанные с памятью исключения? Может ли кто-то прояснить ситуацию?

Solutions Collecting From Web of "Измените файлы макета в одном и том же действии"

Я думаю, что переключение Views не является хорошей идеей, потому что платформа Android уже имеет прочную структуру для обработки перехода между представлениями и поддержания состояния каждой точки зрения, связанной с Activity, всегда лучше придерживаться существующей структуры, а не думать о некоторых Сложную реализацию, которую вы должны выполнить, чтобы делать все это. Если вам не нужны какие-либо из этих вещей, которые нужно позаботиться в вашем приложении, и если только у вас есть только два или три экрана во всем приложении, вы можете попробовать переключить представления. Это даже на основе того, как ваши представления структурированы, если у вас сложная логика и много данных, необходимых для создания этих представлений, это не будет хорошим способом сделать это. Еще одно, если вы добавляете больше просмотров, скажут функциональность вашему приложению, что Должны быть обработаны Управлением, будут высокими. В этом случае вы будете объявлять и инициализировать все представления внутри этой конкретной операции, поэтому сохранение всех этих представлений будет тяжелым. Если вы хотите узнать больше об активации и задаче, обратитесь к этой ссылке

Ну каждый раз, когда вы вызываете setContentView (), вам придется снова найти все макеты, кроме того, я думаю, что вы «можете» это сделать. Но, как обсуждалось здесь, это не рекомендуется, так как это явно противоречит рекомендациям андроида. Также у Commonsware есть несколько очень важных моментов, которые являются одним из самых важных, заключающихся в том, что вы будете подвержены утечке памяти, поскольку вы забываете очищать вещи от ваших просмотров и т. Д., Которые Android обычно будет обрабатывать для вас.

Короче говоря, вы должны следовать рекомендациям Android и использовать фрагменты или начать новую Activity .

В соответствии с документами разработчика setContentView (int layoutResID) используется для

Задайте содержимое активности из ресурса макета. Ресурс будет завышен, добавив все виды верхнего уровня к активности.

В лучшем случае этот метод используется для раздувания макета вашей Activity при запуске. Это не означает, что это вызовет проблемы в будущем, если вы продолжите использовать этот метод. Процитировать ответ в этом вопросе

SetContentView в вашей деятельности фактически вызывает setContentView в Окне, используемом активностью, что само по себе делает намного больше, чем просто раздувание макета.

Я предлагаю вам найти альтернативный способ переключения макетов, например, с помощью ViewPager с Fragments или другим подходом Tabbing, но в конце концов все сводится к тому, что вы хотите сделать.

Этот вопрос может также дать вам то, что вы ищете.