Me da la advertencia de pelusa, Avoid passing null as the view root
al inflar con vistas null
como parent
, por ejemplo:
LayoutInflater.from(context).inflate(R.layout.dialog_edit, null);
Sin embargo, la vista se debe utilizar como contenido de un AlertDialog
, utilizando setView
enAlertDialog.Builder
, por lo que no sé qué se debe pasar como parent
.
¿Qué crees que parent
debería ser en este caso?
android
android-alertdialog
layout-inflater
Randy Sugianto 'Yuku'
fuente
fuente
null
.null
. Hay una razón por la que puedes suprimir la pelusa. Se supone que Lint le dará advertencias por problemas que a menudo se pasan por alto; En este caso, es la invocación correcta.Respuestas:
Use este código para inflar la vista de diálogo sin una advertencia:
fuente
View.inflate
yLayoutInflator.inflate
diferente. 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 justificación.View.inflate(...null)
o@SuppressLint
. En general,LayoutInflater.from(...).inflate(..., parent, false)
es mejor. ¡Gracias por señalar esto!AlertDialog
, que no proporciona ningún elemento primario para la vista que se está inflando. Al inflar la vista raíz de unAlertDialog
, pasar nulo es correcto. Lint no tiene en cuenta este contexto en particular, por lo que la advertencia que da si usa la función que tomaparent
un falso positivo, no es una indicación de nada propenso a errores. Por eso es válido en este caso usar la función que no tomaparent
y no dispara ninguna advertencia.La historia corta es que cuando está inflando una vista para un diálogo,
parent
debe ser nulo, ya que no se conoce en el tiempo de inflación de la vista. En este caso, tiene tres soluciones básicas para evitar la advertencia:Ver inflar el uso de LayoutInflater método completo :En versiones anteriores de Android Lint, esto eliminaba la advertencia. Este ya no es el caso en las versiones posteriores a la 1.0 de Android Studio.inflate(int resource, ViewGroup root, boolean attachToRoot)
. EstablecerattachToRoot
enfalse
. Esto le dice al inflador que el padre no está disponible.Visite http://www.doubleencore.com/2013/05/layout-inflation-as-intended/ para una gran discusión sobre este tema, específicamente la sección "Cada regla tiene una excepción" al final.
fuente
Lanzar nulo como ViewGroup resolvió la advertencia:
donde
li
esta elLayoutInflater's
objetofuente
Deberías usar
AlertDialog.Builder.setView(your_layout_id)
para no tener que inflarlo.Utilizar
AlertDialog.findViewById(your_view_id)
después de crear el diálogo.Use
(AlertDialog) dialogInterface
para obtener eldialog
interior delOnClickListener
y luegodialog.findViewById(your_view_id)
.fuente
A
en la que existe 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 laA
variable de atributo llamadathe_inflated_layout_of_the_dialog
.No necesita especificar un
parent
para un diálogo.Suprima esto usando
@SuppressLint("InflateParams")
en la parte superior de la anulación.fuente
Cuando realmente no tiene ninguna
parent
(por ejemplo, crear vista paraAlertDialog
), no tiene otra opción que pasarnull
. Haga esto para evitar advertencias:fuente
AlertDialog es, hasta donde yo sé, el único caso en el que puede usar nulo de forma segura lugar de una vista principal. En este caso, puede suprimir la advertencia utilizando:
@SuppressLint ("InflateParams")
En general, nunca debe usar SupressLint o una de las soluciones mencionadas en las otras respuestas para deshacerse de la advertencia. La vista principal es necesaria para evaluar los parámetros de diseño que se declaran en el elemento raíz de la vista que se está inflando. Eso significa que si usa nulo en lugar de la vista principal, todos los parámetros de diseño en el elemento raíz serán ignorados y reemplazados por parámetros de diseño predeterminados. La mayoría de las veces estará bien, pero en algunos casos resultará en un error realmente difícil de encontrar.
fuente
De la documentación de
View.inflate()
, diceInflar una vista desde un recurso XML. Este método de conveniencia envuelve la
LayoutInflater
clase, que proporciona una gama completa de opciones para ver la inflación.fuente
De acuerdo con https://developer.android.com/guide/topics/ui/dialogs
por lo tanto, para crear AlertDialog, uso
@SuppressLint("InflateParams")
fuente
En lugar de hacer
hacer
Lo inflará con el padre dado, pero no lo adjuntará al padre.
Muchas gracias a Coeffect ( enlace a su publicación )
fuente