Intereting Posts
Зная, когда View в ListView ушел с экрана? Эффект прокрутки Android (приложение ввода-вывода Google) Как дождаться завершения всех задач в ThreadPoolExecutor, не закрывая Executor? Фрагменты – указанный ребенок уже имеет родителя. Вы должны сначала вызвать removeView () родителя ребенка Почему эта ошибка '- приложение только для чтения не может POST' Как сохранить полную веб-страницу, отображаемую в веб-браузере Android? Проблема обновления приложений для Android Проблема с SQLite Удалить строку StringByEvaluatingJavascriptFromString (метод iOS, что эквивалентно Android?) Событие триггера click на теге ссылки в JS для Android и iPhone Вход в систему Google и выход в систему Android с помощью g-plus новейшего API Возможно ли создать ссылку «share on Facebook», которая откроет собственное приложение Facebook на Android / iOS / mobile вместо диалога веб-ресурса? В чем разница между панелью действий и новой панелью инструментов? Отображать только вкладки в панели действий. Где я могу найти реализацию ContentProvider DownloadManager

В чем разница между removeAllViews () и removeAllViewsInLayout ()

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

Solutions Collecting From Web of "В чем разница между removeAllViews () и removeAllViewsInLayout ()"

RemoveAllViews (): -Установите этот метод, чтобы удалить все дочерние представления из ViewGroup. RemoveAllViewsInLayout (): -Захват подкласса ViewGroup для удаления дочерних представлений от самого себя, когда он должен сначала узнать свой размер на экране, прежде чем он сможет подсчитать, сколько просмотров для него будет отображаться.

Ура!

Как указывает Скотт Биггс, разница не большая. Единственное различие заключается в том, что removeAllViews() вызывает requestLayout() и invalidate() после этого. Ключ к тому, почему эта разница здесь, заключается в понимании наименования removeAllViewInLayout() . Смутно, его смысл заключается не в «удалении всех представлений в этом макете просмотра».

Если мы посмотрим на подобный метод, removeViewInLayout (), мы сможем понять, что это означает:

Удаляет вид во время макета. Это полезно, если в вашем методе onLayout () вам нужно удалить больше просмотров.

Поэтому removeAllViewsInLayout() самом деле означает «удалить все представления, и мы вызываем этот метод во время прохода макета (то есть onLayout ())». Вот почему removeAllViewsInLayout() не вызывает requestLayout() , так как предполагается, что вы уже находитесь внутри прохода макета, поэтому запрос на другой макет не нужен.

Если вы используете removeAllViewsInLayout() , то ваша ответственность – гарантировать, что вы вызываете это во время прохода макета, или для правильного вызова requestLayout() и invalidate() мере необходимости.

Ну, глядя на источник, нет большой разницы:

 public void removeAllViews() { removeAllViewsInLayout(); // Details implemented here requestLayout(); invalidate(true); } 

Поэтому, если вы не хотите вызывать invalidate() в любое время по вашему выбору, вы также можете использовать removeAllViews() и немного сэкономить на вводе.

РЕДАКТИРОВАТЬ
Более подробное объяснение см. В ответе Дэвида Луи . Чтобы подвести итог, используйте removeAllViews() если вы не создаете представление – в этом случае вы бы removeAllViewsInLayout() .