Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

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

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

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

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