Pojawia się ostrzeżenie, nie pozostawiającą włókien, Avoid passing null as the view root
podczas pompowania poglądy z null
jak parent
, jak:
LayoutInflater.from(context).inflate(R.layout.dialog_edit, null);
Jednak widok ma być używany jako zawartość pliku AlertDialog
, używając setView
on AlertDialog.Builder
, więc nie wiem, co powinno zostać przekazane jako parent
.
Jak myślisz, co parent
powinno być w tym przypadku?
android
android-alertdialog
layout-inflater
Randy Sugianto „Yuku”
źródło
źródło
null
.null
. Jest powód, dla którego można powstrzymać kłaczki. Lint ma ostrzegać o często pomijanych problemach; w tym przypadku jest to prawidłowe wywołanie.Odpowiedzi:
Użyj tego kodu, aby wypełnić okno dialogowe bez ostrzeżenia:
źródło
View.inflate
iLayoutInflator.inflate
inaczej. Nie widziałem ostatecznej odpowiedzi. Może to być związane z tym, dlaczego istnieją dwa pozornie równoważne sposoby zawyżenia tego samego poglądu, dla którego również nie widziałem uzasadnienia.View.inflate(...null)
lub@SuppressLint
. OgólnieLayoutInflater.from(...).inflate(..., parent, false)
jest lepiej. Dzięki za wskazanie tego!AlertDialog
, co nie zapewnia rodzica, aby widok był zawyżony. Podczas nadmuchiwania widoku rootaAlertDialog
, przekazywanie wartości null jest poprawne. Lint nie bierze pod uwagę tego konkretnego kontekstu, więc ostrzeżenie, które daje, jeśli używasz funkcji, która przyjmujeparent
fałszywy alarm , a nie wskazuje na coś podatnego na błędy. Dlatego w tym przypadku ważne jest użycie funkcji, która nie przyjmuje odpowiedziparent
i nie wywołuje ostrzeżenia.Krótko mówiąc, kiedy zawyżasz widok do okna dialogowego,
parent
powinna być zerowa, ponieważ nie jest znana w czasie wyświetlania inflacji. W takim przypadku masz trzy podstawowe rozwiązania, aby uniknąć ostrzeżenia:Nadmuchać Pokaż przy użyciu LayoutInflater za pełny sposób :W starszych wersjach Androida Lint spowodowało to usunięcie ostrzeżenia. Nie dotyczy to już wersji Android Studio po wersji 1.0.inflate(int resource, ViewGroup root, boolean attachToRoot)
. UstawattachToRoot
na.false
To mówi inflaterowi, że rodzic nie jest dostępny.Zajrzyj na http://www.doubleencore.com/2013/05/layout-inflation-as-intended/, aby zapoznać się z obszerną dyskusją na ten temat, w szczególności w sekcji „Każda reguła ma wyjątek” na końcu.
źródło
Rzutowanie null, gdy ViewGroup rozwiązało ostrzeżenie:
gdzie
li
jestLayoutInflater's
przedmiot.źródło
Powinieneś użyć
AlertDialog.Builder.setView(your_layout_id)
, więc nie musisz go nadmuchać.Użyj
AlertDialog.findViewById(your_view_id)
po utworzeniu okna dialogowego.Użyj,
(AlertDialog) dialogInterface
aby dostać się dodialog
wnętrza,OnClickListener
a następniedialog.findViewById(your_view_id)
.źródło
A
w której jest metodaonCreateDialog
. W tym ostatnim napisałem, jak powiedziałeśalert_dialog_builder.setView(R.layout.edit_account_dialog);
. Ale muszę przechowywać ten zawyżony układ wA
zmiennej atrybutu o nazwiethe_inflated_layout_of_the_dialog
.Nie musisz określać
parent
okna dialogowego.Pomiń to, używając
@SuppressLint("InflateParams")
w górnej części zastąpienia.źródło
Kiedy tak naprawdę nie masz żadnego
parent
(na przykład tworzenie widoku dlaAlertDialog
), nie masz innego wyjścia niż zdanienull
. Zrób to więc, aby uniknąć ostrzeżenia:źródło
O ile wiem, AlertDialog jest jedynym przypadkiem, w którym można bezpiecznie używać wartości null zamiast widoku nadrzędnego. W takim przypadku możesz wyłączyć ostrzeżenie, używając:
@SuppressLint ("InflateParams")
Ogólnie rzecz biorąc, nigdy nie należy używać SupressLint ani jednego z obejść wymienionych w innych odpowiedziach, aby pozbyć się ostrzeżenia. Widok nadrzędny jest niezbędny do oceny parametrów układu, które są zadeklarowane w elemencie głównym rozszerzanego widoku. Oznacza to, że jeśli użyjesz null zamiast widoku nadrzędnego, wszystkie parametry układu w elemencie głównym zostaną zignorowane i zastąpione domyślnymi parametrami układu. W większości przypadków będzie dobrze, ale w niektórych przypadkach spowoduje to naprawdę trudny do znalezienia błąd.
źródło
Z dokumentacji
View.inflate()
wynikaWypełnij widok z zasobu XML. Ta wygodna metoda otacza
LayoutInflater
klasę, która zapewnia pełen zakres opcji inflacji widoku.źródło
Według https://developer.android.com/guide/topics/ui/dialogs
dlatego do tworzenia AlertDialog używam
@SuppressLint("InflateParams")
źródło
Zamiast robić
robić
Napompuje go z danym rodzicem, ale nie przywiąże go do rodzica.
Podziękowania dla Coeffect ( link do jego postu )
źródło