android - "Evita il passaggio di null come avviso di visualizzazione radice" quando si gonfia la vista per essere utilizzata da AlertDialog




3 Answers

La storia breve è che quando si gonfia una vista per una finestra di dialogo, il parent dovrebbe essere nullo, poiché non è noto al momento dell'inflazione della visualizzazione. In questo caso, hai tre soluzioni di base per evitare l'avvertimento:

  1. Sopprimere l'avviso usando un @Suppress
  2. Gonfiare la vista usando il metodo di gonfiaggio di View. Questo è solo un involucro attorno a un LayoutInflater, e per lo più solo offusca il problema.
  3. Gonfiare la vista utilizzando il metodo completo di LayoutInflater: inflate(int resource, ViewGroup root, boolean attachToRoot) . Imposta attachToRoot su false . Questo indica al gonfiatore che il genitore non è disponibile. Nelle versioni precedenti di Android Lint, questo rimuoveva l'avviso. Questo non è più il caso nelle versioni post 1.0 di Android Studio.

Controlla http://www.doubleencore.com/2013/05/layout-inflation-as-intended/ per una discussione approfondita su questo problema, in particolare la sezione "Ogni regola ha un'eccezione" alla fine.

android alertdialog layout-inflater

Ricevo l'avviso per la lanuggine, Avoid passing null as the view root quando gonfiamo le viste con null come parent , come:

LayoutInflater.from(context).inflate(R.layout.dialog_edit, null);

Tuttavia, la vista deve essere utilizzata come contenuto di un AlertDialog , utilizzando setView su AlertDialog.Builder , quindi non so cosa deve essere passato come parent .

Cosa pensi che dovrebbe essere il parent in questo caso?




Dovresti usare AlertDialog.Builder.setView(your_layout_id) , quindi non è necessario gonfiarlo.

Utilizzare AlertDialog.findViewById(your_view_id) dopo aver creato la finestra di dialogo.

Usa (AlertDialog) dialogInterface per ottenere la dialog all'interno di OnClickListener e quindi dialog.findViewById(your_view_id) .




Non è necessario specificare un parent per una finestra di dialogo.

Sopprimetelo usando @SuppressLint("InflateParams") nella parte superiore dell'override.




Related