Passer null pour root studio me donne cet avertissement:
Évitez de passer à null en tant que racine de la vue (nécessité de résoudre les paramètres de présentation sur l'élément racine de la présentation gonflée)
Il montre une valeur nulle dans getGroupView
. S'il vous plaît aider.
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;
}
}
Au lieu de faire
convertView = infalInflater.inflate(R.layout.list_item, null);
faire
convertView = infalInflater.inflate(R.layout.list_item, parent, false);
Il va le gonfler avec le parent donné, mais ne l'attachera pas au parent.
J'ai trouvé un bon article sur LayoutInflater
. L'auteur explique le fonctionnement de toutes les versions de la méthode inflate
et donne des exemples de ListView
et AlertDialog
.
http://www.doubleencore.com/2013/05/layout-inflation-as-intended/
Mise à jour # 1.
Cette réponse m'a récemment aidé aussi. https://stackoverflow.com/a/5027921/1065835
Voilà, pour une raison quelconque, utiliser View.inflate au lieu de gonfler à partir d'un layoutinflater fait disparaître l'erreur de la charpie. Je pensais poster ceci ici puisque ce fil est au sommet de la recherche Google ...
view = View.inflate(context,R.layout.custom_layout,null);
Lorsque vous n'avez vraiment pas de parent
(par exemple, en créant une vue pour AlertDialog
), vous n'avez pas d'autre moyen que de passer null
. Alors faites ceci pour éviter les avertissements:
final ViewGroup nullParent = null;
convertView = layoutInflater.inflate(R.layout.list_item, nullParent);
Une bonne information que j'ai trouvée en cherchant un moyen de résoudre cela. Selon Dave Smith,
L'inflation de la présentation est le terme utilisé dans le contexte de Android pour indiquer le moment où une ressource de présentation XML est analysée et convertie en une hiérarchie d'objets View.
La ViewGroup
été demandée ici dans le cadre des paramètres de la méthode inflate est utilisée pour hériter d'un style de niveau supérieur. Bien que passer à null puisse sembler inoffensif, il peut en réalité causer de graves problèmes à votre application ultérieurement. En savoir plus sur ceci ici .
Pour AlertDialog
le code ci-dessous peut être utilisé
convertView = layoutInflater.inflate(R.layout.list_item, findViewById(Android.R.id.content), false);