Предупреждение "Избегайте передачи null как корня представления" при раздувании представления для использования AlertDialog

Я получаю предупреждение lint, Avoid passing null as the view root при раздувании представлений с null как parent, например:

LayoutInflater.from(context).inflate(R.layout.dialog_edit, null);

Однако представление должно использоваться как содержимое AlertDialog, используя setView on AlertDialog.Builder, поэтому я не знаю, что должно быть передано как parent.

Как вы думаете, в этом случае parent?

Ответ 1

Используйте этот код для раздувания диалогового окна без предупреждения:

View.inflate(context, R.layout.dialog_edit, null);

Ответ 2

Короче говоря, когда вы раздуваете представление для диалога, parent должно быть нулевым, так как оно неизвестно в поле "Просмотр времени инфляции". В этом случае у вас есть три основных решения, чтобы избежать предупреждения:

  • Подавить предупреждение с помощью @Suppress
  • Надуть вид с помощью метода inflate. Это всего лишь оболочка вокруг LayoutInflater и в основном просто запутывает проблему.
  • Нажать "Просмотр" с помощью LayoutInflater полный метод: inflate(int resource, ViewGroup root, boolean attachToRoot). Установите attachToRoot в false. Это говорит о том, что родительский пакет недоступен. В старых версиях Android Lint это удалило предупреждение. Это больше не относится к версиям Android Studio 1.0.

Ознакомьтесь с http://www.doubleencore.com/2013/05/layout-inflation-as-intended/, чтобы обсудить эту проблему, в частности раздел "Каждое правило имеет исключение" в конце.

Ответ 3

Отбрасывание null, когда ViewGroup разрешило предупреждение:

View dialogView = li.inflate(R.layout.input_layout,(ViewGroup)null);

где li - объект LayoutInflater's.

Ответ 4

Вы должны использовать AlertDialog.Builder.setView(your_layout_id), поэтому вам не нужно раздувать его.

Используйте AlertDialog.findViewById(your_view_id) после создания диалогового окна.

Используйте (AlertDialog) dialogInterface, чтобы получить dialog внутри OnClickListener, а затем dialog.findViewById(your_view_id).

Ответ 5

Если у вас действительно нет parent (например, создание представления для AlertDialog), у вас нет другого выбора, кроме передачи null. Поэтому сделайте это, чтобы избежать предупреждения:

final ViewGroup nullParent = null;
convertView = infalInflater.inflate(R.layout.list_item, nullParent);

Ответ 6

Вам не нужно указывать parent для диалога.

Подавить это, используя @SuppressLint("InflateParams") в верхней части переопределения.

Ответ 7

Вместо того, чтобы делать

view = inflater.inflate(R.layout.list_item, null);

делать

view = inflater.inflate(R.layout.list_item, parent, false);

Он раздует его с данным родителем, но не привяжет его к родительскому.

Большое спасибо Coeffect (ссылка на его сообщение)