Avertissement «Éviter de transmettre null en tant que racine de vue» lors du gonflage de la vue pour une utilisation par AlertDialog

J’obtiens l’avertissement de peluches, Avoid passing null as the view root lorsque vous gonflez des vues dont le caractère est null , par exemple:

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

Cependant, la vue doit être utilisée comme contenu d’un AlertDialog , en utilisant setView sur AlertDialog.Builder , donc je ne sais pas ce qui doit être passé en tant que parent .

Que pensez-vous que le parent devrait être dans ce cas?

Utilisez ce code pour gonfler la vue de dialog sans avertissement:

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

La petite histoire est que lorsque vous gonflez une vue pour une boîte de dialog, parent doit être nul, car il n’est pas connu au moment de l’inflation. Dans ce cas, vous avez trois solutions de base pour éviter l’avertissement:

  1. Supprimer l’avertissement en utilisant un @Suppress
  2. Gonflez la vue en utilisant la méthode de gonflement de View. Ceci est juste un wrapper autour d’un LayoutInflater, et la plupart du temps simplement obscurcit le problème.
  3. Gonflez la vue en utilisant la méthode complète de LayoutInflater: inflate(int resource, ViewGroup root, boolean attachToRoot) . Définissez attachToRoot sur false . Cela indique à l’influent que le parent n’est pas disponible. Dans les anciennes versions d’Android Lint, cela supprimait l’avertissement. Ce n’est plus le cas dans les versions post 1.0 d’Android Studio.

Consultez http://www.doubleencore.com/2013/05/layout-inflation-as-intended/ pour une excellente discussion sur ce problème, en particulier la section “Chaque règle a une exception” à la fin.

La conversion de null lorsque ViewGroup a résolu l’avertissement:

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

li est l’object LayoutInflater's .

Vous devez utiliser AlertDialog.Builder.setView(your_layout_id) , vous n’avez donc pas besoin de le gonfler.

Utilisez AlertDialog.findViewById(your_view_id) après avoir créé la boîte de dialog.

Utilisez (AlertDialog) dialogInterface pour obtenir la dialog dans OnClickListener , puis dialog.findViewById(your_view_id) .

Lorsque vous n’avez pas de parent (par exemple, créer une vue pour AlertDialog ), vous n’avez pas d’autre choix que de passer la valeur null . Alors faites ceci pour éviter l’avertissement:

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

Vous n’avez pas besoin de spécifier un parent pour une boîte de dialog.

Supprimez ceci en utilisant @SuppressLint("InflateParams") en haut de la substitution.

Au lieu de faire

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

faire

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

Cela le gonfle avec le parent donné, mais ne l’attache pas au parent.

Merci beaucoup à Coeffect ( lien vers son post )