Recebo o aviso de fiapo, Avoid passing null as the view root
ao inflar visualizações com null
as parent
, como:
LayoutInflater.from(context).inflate(R.layout.dialog_edit, null);
No entanto, a visualização deve ser usada como o conteúdo de um AlertDialog
, usando setView
on AlertDialog.Builder
, então não sei o que deve ser passado como parent
.
O que você acha que parent
deveria ser nesse caso?
android
android-alertdialog
layout-inflater
Randy Sugianto 'Yuku'
fonte
fonte
null
.null
. Há uma razão para você suprimir o fiapo. Supõe-se que o Lint avise sobre problemas perdidos com frequência; neste caso, é invocação correta.Respostas:
Use este código para aumentar a exibição da caixa de diálogo sem aviso:
fonte
View.inflate
e de maneiraLayoutInflator.inflate
diferente. Eu não vi uma resposta definitiva. Pode estar relacionado ao motivo pelo qual existem duas maneiras aparentemente equivalentes de inflar a mesma visão, para as quais também não vi uma justificativa.View.inflate(...null)
ou outro@SuppressLint
. Em geral,LayoutInflater.from(...).inflate(..., parent, false)
é melhor. Obrigado por apontar isso!AlertDialog
, que não fornece pai para a exibição que está sendo inflada. Ao inflar a visualização raiz de umAlertDialog
, passar nulo está correto. O Lint não é responsável por esse contexto específico; portanto, o aviso emitido se você usar a função que recebeparent
um falso positivo, não é uma indicação de algo propenso a erros. É por isso que é válido, neste caso, usar a função que não aceitaparent
e aciona nenhum aviso.A história resumida é que, quando você está inflando uma visualização para um diálogo,
parent
deve ser nulo, pois não é conhecido no momento da inflação da Visualização. Nesse caso, você tem três soluções básicas para evitar o aviso:Inflar o View usando de LayoutInflater método integral :Nas versões mais antigas do Android Lint, isso removeu o aviso. Esse não é mais o caso das versões posteriores ao 1.0 do Android Studio.inflate(int resource, ViewGroup root, boolean attachToRoot)
. DefinaattachToRoot
comofalse
. Isso informa ao inflador que o pai não está disponível.Confira http://www.doubleencore.com/2013/05/layout-inflation-as-intended/ para uma ótima discussão sobre esse problema, especificamente a seção "Toda regra tem uma exceção" no final.
fonte
A conversão de nulo como ViewGroup resolveu o aviso:
onde
li
está oLayoutInflater's
objetofonte
Você deve usar
AlertDialog.Builder.setView(your_layout_id)
, para não precisar inflar.Use
AlertDialog.findViewById(your_view_id)
depois de criar a caixa de diálogo.Use
(AlertDialog) dialogInterface
para obter odialog
interior doOnClickListener
e entãodialog.findViewById(your_view_id)
.fonte
A
em que há o métodoonCreateDialog
. Neste último, escrevi como você dissealert_dialog_builder.setView(R.layout.edit_account_dialog);
. Mas eu tenho que armazenar esse layout inflado naA
variável de atributo do nomethe_inflated_layout_of_the_dialog
.Você não precisa especificar um
parent
para um diálogo.Suprima isso usando
@SuppressLint("InflateParams")
na parte superior da substituição.fonte
Quando você realmente não tem nenhuma
parent
(por exemplo, criando view paraAlertDialog
), não tem outra opção senão a aprovaçãonull
. Faça isso para evitar aviso:fonte
O AlertDialog é, até onde eu sei, o único caso em que você pode usar com segurança nulo vez de uma exibição pai. Nesse caso, você pode suprimir o aviso usando:
@SuppressLint ("InflateParams")
Em geral, você nunca deve usar o SupressLint ou uma das soluções alternativas mencionadas nas outras respostas para se livrar do aviso. A visualização pai é necessária para avaliar os Parâmetros de Layout declarados no elemento raiz da Visualização que está sendo inflada. Isso significa que, se você usar nulo em vez da exibição pai, todos os Parâmetros de Layout no elemento raiz serão ignorados e substituídos pelos Parâmetros de Layout padrão. Na maioria das vezes, tudo fica bem, mas em alguns casos isso resulta em um bug realmente difícil de encontrar.
fonte
Da documentação de
View.inflate()
, dizInfle uma exibição de um recurso XML. Esse método de conveniência envolve a
LayoutInflater
classe, que fornece uma gama completa de opções para visualizar a inflação.fonte
De acordo com https://developer.android.com/guide/topics/ui/dialogs
portanto, para criar AlertDialog, eu uso
@SuppressLint("InflateParams")
fonte
Em vez de fazer
Faz
Ele irá inflá-lo com o pai fornecido, mas não o anexará ao pai.
Muito obrigado a Coeffect ( link para seu post )
fonte