Recibo la advertencia de pelusa, Avoid passing null as the view root
al inflar las vistas con null
como parent
me gusta:
LayoutInflater.from(context).inflate(R.layout.dialog_edit, null);
Sin embargo, la vista debe usarse como el contenido de un AlertDialog
usando setView
en AlertDialog.Builder
por lo que no sé qué se debe pasar como el parent
.
¿Qué piensas de la parent
debe ser en este caso?
Use este código para inflar la vista de diálogo sin una advertencia:
View.inflate(context, R.layout.dialog_edit, null);
-
@MarianPaździoch Porque no provoca una advertencia. 🙂 Por supuesto, eso plantea la pregunta de por qué el código de pelusa trata
View.inflate
yLayoutInflator.inflate
diferentemente. No he visto una respuesta definitiva. Puede estar relacionado con por qué hay dos formas aparentemente equivalentes de inflar la misma vista, para lo cual tampoco he visto una razón.–Eduardo Brey
9 de febrero de 2015 a las 13:37
-
Esto está mal. Solo suprime la advertencia, pero el problema sigue ahí. Leer posiblemobile.com/2013/05/layout-inflation-as-intended para una mejor solución.
– jcsahnwaldt Reincorporar a Monica
18 mayo 2015 a las 15:40
-
@JonaChristopherSahnwaldt ¿Podría dar más detalles? El artículo dice que AlertDialog debe tener un padre nulo porque no tiene una vista raíz. Para mí, parece reforzar que la advertencia tiene sentido para las vistas fuera de un cuadro de diálogo, pero no se aplica a una vista de cuadro de diálogo.
–Eduardo Brey
18 mayo 2015 a las 15:46
-
@EdwardBrey Tienes razón: no leí el artículo a fondo. En este caso particular, está bien usar cualquiera
View.inflate(...null)
o@SuppressLint
. En general,LayoutInflater.from(...).inflate(..., parent, false)
es mejor. ¡Gracias por señalar esto!– jcsahnwaldt Reincorporar a Monica
18 mayo 2015 a las 15:54
-
@Bevor That Evite pasar la pregunta nula se trata de casos en los que tiene un padre. Esta pregunta es sobre
AlertDialog
, que no proporciona elementos primarios para la vista que se infla. Al inflar la vista raíz de unAlertDialog
, pasar nulo es correcto. Lint no tiene en cuenta este contexto particular, por lo que la advertencia que da si usa la función que tomaparent
un falso positivo, no una indicación de algo propenso a errores. Por eso es válido en este caso usar la función que no tomaparent
y no activa ninguna advertencia.–Eduardo Brey
8 de diciembre de 2018 a las 13:01
emersso
La historia corta es que cuando estás inflando una vista para un diálogo, parent
debe ser nulo, ya que no se conoce en Ver tiempo de inflación. En este caso, tienes tres soluciones básicas para evitar el aviso:
- Suprimir la advertencia mediante @Suppress
- Inflar la vista usando View’s método de inflado. Esto es solo un envoltorio alrededor de un LayoutInflater, y en su mayoría solo ofusca el problema.
Inflar la vista usando LayoutInflater’s método completo:En versiones anteriores de Android Lint, esto eliminaba la advertencia. Este ya no es el caso en las versiones posteriores a 1.0 de Android Studio.inflate(int resource, ViewGroup root, boolean attachToRoot)
. EstablecerattachToRoot
afalse
.Esto le dice al inflador que el padre no está disponible.
Verificar http://www.doubleencore.com/2013/05/layout-inflation-as-intended/ para una gran discusión de este tema, específicamente la sección “Cada regla tiene una excepción” al final.
Deberías usar AlertDialog.Builder.setView(your_layout_id)
por lo que no es necesario inflarlo.
Usar AlertDialog.findViewById(your_view_id)
después de crear el diálogo.
Usar (AlertDialog) dialogInterface
para obtener el dialog
dentro de OnClickListener
y entonces dialog.findViewById(your_view_id)
.
-
¡Este es el camino a seguir! Simplemente cree el cuadro de diálogo y luego encuentre su vista.
– joe1806772
28 de marzo de 2017 a las 23:02
-
Esta es una buena forma de hacerlo, sin embargo recuerda que este método fue agregado en API 21
– Nicolás Carrasco-Stevenson
11 de abril de 2018 a las 7:07
-
¿Qué sucede si debemos almacenar este diseño inflado en alguna variable? Por ejemplo, escribí una clase
A
en el que está el métodoonCreateDialog
. En este último, escribí como dijistealert_dialog_builder.setView(R.layout.edit_account_dialog);
. Pero tengo que almacenar este diseño inflado en elA
variable de atributo llamadathe_inflated_layout_of_the_dialog
.– JarsOfJam-Programador
26 de febrero de 2019 a las 21:56
SVL Narasimham
Casting null as ViewGroup resolvió la advertencia:
View dialogView = li.inflate(R.layout.input_layout,(ViewGroup)null);
dónde li
es el LayoutInflater's
objeto.
No es necesario especificar un parent
para un diálogo.
Suprime esto usando @SuppressLint("InflateParams")
en la parte superior de la anulación.
Cuando realmente no tienes nada parent
(por ejemplo, creando una vista para AlertDialog
), no te queda más remedio que pasar null
. Así que haz esto para evitar la advertencia:
final ViewGroup nullParent = null;
convertView = infalInflater.inflate(R.layout.list_item, nullParent);
dharma
De acuerdo a https://developer.android.com/guide/topics/ui/dialogs
Inflar y establecer el diseño para el cuadro de diálogo
Pase nulo como la vista principal porque va en el diseño del cuadro de diálogo
por lo tanto, para crear AlertDialog, uso @SuppressLint("InflateParams")
LayoutInflater inflater = requireActivity().getLayoutInflater();
@SuppressLint("InflateParams")
View view = inflater.inflate(R.layout.layout_dialog, null);
builder.setView(view);
Pase falso en lugar de nulo. mira esto
– Señor Tonto
16/10/2014 a las 12:54
Intente darle un diseño principal en lugar de nulo y luego no use setView.
– Haresh Chhelana
16/10/2014 a las 13:09
Suprimo la advertencia de pelusa para el método. Todavía no he visto una buena razón por la que no debería pasar
null
.– 323go
16/10/2014 a las 14:09
Entiendo el problema del diseño dependiendo de la vista principal, pero eso realmente no se aplica a un AlertDialog que esencialmente flota por encima de la jerarquía de vistas de la actividad. Por eso puedes pasar
null
. Hay una razón por la que puedes suprimir la pelusa. Se supone que Lint te da advertencias sobre problemas que a menudo se pasan por alto; en este caso, es la invocación correcta.– 323go
17 de octubre de 2014 a las 1:50
@ashutiwari4 Estoy aprendiendo cosas nuevas todos los días… hermoso mundo :I
– Raúl
24 de abril de 2017 a las 6:51