Intereting Posts
Call Главная тема из Secondary thread в Java / Android Изменение TextColor в SearchView с помощью панели инструментов Android Растровое изображение Recycle ImageView Не хотите, чтобы мягкая клавиатура автоматически показывалась при запуске – Android Import android не может быть разрешен Java / android как запустить AsyncTask после 3 секунд задержки? В чем разница между настройками «target» в файле «project.properties» и тегом «android: targetSdkVersion» в манифесте? Почему следует рассматривать использование AndroidObservables в RxJava Samsung Galaxy S6 Emulator в студии Android Создайте файл PKCS # 12 с самозаверяющим сертификатом через OpenSSL в Windows для моего приложения для Android Обновление прокрутки триггеров вместо раскрытия панели инструментов Как удалить определенное пространство между родителем и дочерним элементом в ExpandableListView Лучший способ конвертировать речь в произношение Нет содержимого для отображения из-за синтаксического анализа джексонов конца ввода Эффект щелчка на кнопке в Android

В чем разница между 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() .