web-dev-qa-db-fra.com

É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)

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;
    }

}
210
hash

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.

340
Coeffect

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

50
Maksim Dmitriev

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);
29
Thunderstick

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);
28
Mousa

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 .

4
ojonugwa ochalifu

Pour AlertDialog le code ci-dessous peut être utilisé

convertView = layoutInflater.inflate(R.layout.list_item, findViewById(Android.R.id.content), false);
1
Mostafa Monowar