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


Я получаю предупреждение Линт, 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 должен быть в этом случае?

7 88

7 ответов:

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

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

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

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

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

приведение null в качестве ViewGroup разрешило предупреждение:

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

здесь li это

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

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

использовать (AlertDialog) dialogInterface для получения dialog внутри OnClickListener а то dialog.findViewById(your_view_id).

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

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

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

подавить это с помощью @SuppressLint("InflateParams") в верхней части переопределить.

вместо

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

do

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

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

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