Je reçois l'avertissement de peluche, Avoid passing null as the view root
lorsque je 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
on AlertDialog.Builder
, donc je ne sais pas ce qui devrait être passé en tant que parent
.
Que pensez-vous que parent
devrait être dans ce cas?
android
android-alertdialog
layout-inflater
Randy Sugianto 'Yuku'
la source
la source
null
.null
. Il y a une raison pour laquelle vous pouvez supprimer les peluches. Lint est censé vous avertir des problèmes souvent manqués; dans ce cas, c'est une invocation correcte.Réponses:
Utilisez ce code pour gonfler la vue de la boîte de dialogue sans avertissement:
la source
View.inflate
etLayoutInflator.inflate
différemment. Je n'ai pas vu de réponse définitive. Cela peut être lié à la raison pour laquelle il existe deux façons apparemment équivalentes de gonfler le même point de vue, pour lesquelles je n'ai pas non plus vu de justification.View.inflate(...null)
ou@SuppressLint
. En général,LayoutInflater.from(...).inflate(..., parent, false)
c'est mieux. Merci de l'avoir signalé!AlertDialog
, qui ne fournit aucun parent pour la vue gonflée. Lors du gonflement de la vue racine d'unAlertDialog
, la transmission de null est correcte. Lint ne tient pas compte de ce contexte particulier, donc l'avertissement qu'il donne si vous utilisez la fonction qui prendparent
un faux positif, pas une indication de quoi que ce soit sujet aux erreurs. C'est pourquoi il est valide dans ce cas d'utiliser la fonction qui prend nonparent
et ne déclenche aucun avertissement.La petite histoire est que lorsque vous gonflez une vue pour une boîte de dialogue,
parent
doit être nulle, 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:Gonflez la vue à l' aide de LayoutInflater complète méthode :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.inflate(int resource, ViewGroup root, boolean attachToRoot)
. RégléattachToRoot
surfalse
.Cela indique au gonfleur que le parent n'est pas disponible.Consultez http://www.doubleencore.com/2013/05/layout-inflation-as-intended/ pour une grande discussion sur ce problème, en particulier la section «Chaque règle a une exception» à la fin.
la source
Le cast de null en tant que ViewGroup a résolu l'avertissement:
où
li
est l'LayoutInflater's
objet.la source
Vous devriez l'utiliser
AlertDialog.Builder.setView(your_layout_id)
, vous n'avez donc pas besoin de le gonfler.À utiliser
AlertDialog.findViewById(your_view_id)
après la création de la boîte de dialogue.Utilisez
(AlertDialog) dialogInterface
pour obtenir l'dialog
intérieur duOnClickListener
puisdialog.findViewById(your_view_id)
.la source
A
dans laquelle il y a la méthodeonCreateDialog
. Dans ce dernier, j'ai écrit comme tu l'as ditalert_dialog_builder.setView(R.layout.edit_account_dialog);
. Mais je dois stocker cette mise en page gonflée dans laA
variable d 'attribut nomméethe_inflated_layout_of_the_dialog
.Vous n'avez pas besoin de spécifier un
parent
pour une boîte de dialogue.Supprimez ceci en utilisant
@SuppressLint("InflateParams")
en haut du remplacement.la source
Quand vous n'en avez vraiment pas
parent
(par exemple créer une vue pourAlertDialog
), vous n'avez pas d'autre choix que de passernull
. Alors faites ceci pour éviter les avertissements:la source
Le AlertDialog est pour autant que je sache 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 parente est nécessaire pour évaluer les paramètres de mise en page qui sont déclarés dans l'élément racine de la vue gonflée. Cela signifie que si vous utilisez null au lieu de la vue parente, tous les paramètres de mise en page de l'élément racine seront ignorés et remplacés par les paramètres de mise en page par défaut. La plupart du temps, ce sera bien, mais dans certains cas, cela entraînera un bogue vraiment difficile à trouver.
la source
D'après la documentation de
View.inflate()
, il est ditGonflez une vue à partir d'une ressource XML. Cette méthode pratique englobe la
LayoutInflater
classe, qui fournit une gamme complète d'options pour l'inflation de vue.la source
Selon https://developer.android.com/guide/topics/ui/dialogs
par conséquent, pour créer AlertDialog, j'utilise
@SuppressLint("InflateParams")
la source
Au lieu de faire
faire
Cela le gonflera avec le parent donné, mais ne l'attachera pas au parent.
Un grand merci à Coeffect ( lien vers son article )
la source