studio layoutinflater example android android-layout warnings layout-inflater

android - layoutinflater - Evite pasar nulos como raíz de la vista(es necesario resolver los parámetros de diseño en el elemento raíz del diseño inflado)



inflate android studio example (5)

Pasar nulo para root studio me da esta advertencia:

Evite pasar nulos como raíz de la vista (es necesario resolver los parámetros de diseño en el elemento raíz del diseño inflado)

Está mostrando un valor nulo en getGroupView . Por favor ayuda.

public class ExpandableListAdapter extends BaseExpandableListAdapter { private Context _context; private List<String> _listDataHeader; // header titles // child data in format of header title, child title private HashMap<String, List<String>> _listDataChild; public ExpandableListAdapter(Context context, List<String> listDataHeader, HashMap<String, List<String>> listChildData) { super(); this._context = context; this._listDataHeader = listDataHeader; this._listDataChild = listChildData; } @Override public Object getChild(int groupPosition, int childPosititon) { return this._listDataChild.get(this._listDataHeader.get(groupPosition)) .get(childPosititon); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { final String childText = (String) getChild(groupPosition, childPosition); if (convertView == null) { LayoutInflater infalInflater = (LayoutInflater) this._context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = infalInflater.inflate(R.layout.list_item, null); } TextView txtListChild = (TextView) convertView .findViewById(R.id.lblListItem); txtListChild.setText(childText); return convertView; } @Override public int getChildrenCount(int groupPosition) { return this._listDataChild.get(this._listDataHeader.get(groupPosition)) .size(); } @Override public Object getGroup(int groupPosition) { return this._listDataHeader.get(groupPosition); } @Override public int getGroupCount() { return this._listDataHeader.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { String headerTitle = (String) getGroup(groupPosition); if (convertView == null) { LayoutInflater infalInflater = (LayoutInflater) this._context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = infalInflater.inflate(R.layout.list_group, null); } TextView lblListHeader = (TextView) convertView .findViewById(R.id.lblListHeader); lblListHeader.setTypeface(null, Typeface.BOLD); lblListHeader.setText(headerTitle); return convertView; } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }


Aquí tienes, por alguna razón, usar View.inflate en lugar de inflar desde un layoutinflater hace desaparecer el error de pelusa. Pensé que publicaría esto aquí ya que este hilo está en la parte superior de la Búsqueda de Google ...

view = View.inflate(context,R.layout.custom_layout,null);


Cuando realmente no tiene ningún parent (por ejemplo, creando una vista para AlertDialog ), no tiene otra manera que pasar null . Así que haz esto para evitar la advertencia:

final ViewGroup nullParent = null; convertView = layoutInflater.inflate(R.layout.list_item, nullParent);


En lugar de hacer

convertView = infalInflater.inflate(R.layout.list_item, null);

hacer

convertView = infalInflater.inflate(R.layout.list_item, parent, false);

Lo inflará con el padre dado, pero no lo adjuntará al padre.


Encontré un buen artículo sobre LayoutInflater . El autor explica cómo funcionan todas las versiones del método AlertDialog y da ejemplos de ListView y AlertDialog

http://www.doubleencore.com/2013/05/layout-inflation-as-intended/

Actualización # 1.

Esta respuesta recientemente me ayudó, también. https://.com/a/5027921/1065835


Una buena información que encontré mientras buscaba una manera de resolver esto. Según Dave Smith,

Inflación de diseño es el término utilizado en el contexto de Android para indicar cuándo un recurso de diseño XML se analiza y se convierte en una jerarquía de objetos de vista.

El ViewGroup solicitado aquí como parte de los parámetros del método de inflado se utiliza para heredar un estilo de nivel superior. Si bien pasar nulo puede parecer inofensivo, puede causar graves problemas para su aplicación más adelante. Lea más sobre esto here .