Je reçois le message de peluches, Avoid passing null as the view root
lorsqu’on gonfle des vues avec null
comme parent
, comme:
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 devrait ê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 dialogue sans avertissement:
View.inflate(context, R.layout.dialog_edit, null);
En résumé, lorsque vous gonflez une vue pour une boîte de dialogue, parent
devrait être nul, car elle n’est pas connue au moment de l’inflation de la vue. Dans ce cas, vous avez trois solutions de base pour éviter l'avertissement:
inflate(int resource, ViewGroup root, boolean attachToRoot)
. Définissez attachToRoot
sur false
. Cela indique au système d'inflation que le parent n'est pas disponible.Consultez http://www.doubleencore.com/2013/05/layout-inflation-as-intended/ pour une bonne discussion sur ce sujet, spécifiquement la section "Chaque règle a une exception" à la fin.
La conversion de null en ViewGroup a résolu l'avertissement suivant:
View dialogView = li.inflate(R.layout.input_layout,(ViewGroup)null);
où li
est le LayoutInflater's
objet.
Vous devez utiliser AlertDialog.Builder.setView(your_layout_id)
, de sorte que vous n'avez pas besoin de le gonfler.
Utilisez AlertDialog.findViewById(your_view_id)
après avoir créé le dialogue.
Utilisez (AlertDialog) dialogInterface
Pour obtenir le dialog
à l'intérieur du OnClickListener
puis dialog.findViewById(your_view_id)
.
Lorsque vous n'avez vraiment pas de parent
(par exemple, créer une vue pour AlertDialog
), vous n'avez pas d'autre choix que de passer null
. Alors faites ceci pour éviter les avertissements:
final ViewGroup nullParent = null;
convertView = infalInflater.inflate(R.layout.list_item, nullParent);
Vous n'avez pas besoin de spécifier un parent
pour un dialogue.
Supprimez cela en utilisant @SuppressLint("InflateParams")
en haut du remplacement.
Pour autant que je sache, AlertDialog est le seul cas où vous pouvez utiliser en toute sécurité null au lieu d'une vue parent. Dans ce cas, vous pouvez supprimer l'avertissement en utilisant:
@SuppressLint ("InflateParams")
En général, vous ne devez jamais utiliser SupressLint ou l’une des solutions de contournement mentionnées dans les autres réponses pour vous débarrasser de l’avertissement. La vue parent est nécessaire pour évaluer les paramètres de présentation déclarés dans l'élément racine de la vue en cours de gonflage. Cela signifie que si vous utilisez null à la place de la vue parent, tous les paramètres de présentation de l'élément racine seront ignorés et remplacés par les paramètres de présentation par défaut. La plupart du temps, tout ira bien, mais dans certains cas, il en résultera un bogue très difficile à trouver.