Vermijd het doorgeven van null als de hoofdweergave van de weergave (moet de lay-outparameters oplossen in het hoofdelement van de opgeblazen lay-out)

Null doorgeven voor root studio geeft me deze waarschuwing:

Vermijd het doorgeven van null als de hoofdweergave van de weergave (moet de lay-outparameters oplossen in het hoofdelement van de opgeblazen lay-out)

Het toont een null-waarde in getGroupView. Help alstublieft.

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

Antwoord 1, autoriteit 100%

In plaats van te doen

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

doen

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

Het zal het opblazen met de gegeven ouder, maar zal het niet aan de ouder bevestigen.


Antwoord 2, autoriteit 15%

Ik heb een goed artikel gevonden over LayoutInflater. De auteur legt uit hoe alle versies van de inflatemethode werken en geeft voorbeelden van ListViewen AlertDialog

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

Update #1.

Dit antwoord heeft me onlangs ook geholpen.
https://stackoverflow.com/a/5027921/1065835


Antwoord 3, autoriteit 14%

Alsjeblieft, om de een of andere reden zorgt het gebruik van View.inflate in plaats van opblazen vanuit een layout-inflater ervoor dat de pluisfout verdwijnt.
Ik dacht ik post dit hier, aangezien deze thread bovenaan Google Zoeken staat…

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

Antwoord 4, autoriteit 9%

Bewerken:

Op het moment dat ik dit antwoord schreef, was ik niet op de hoogte van Lint-onderdrukkingen. Het is beter om Lint te onderdrukken in plaats van de IDE te misleiden. Voeg dit toe boven de regel of methode:

@SuppressLint("InflateParams")

Oud antwoord:

Als je echt geen parenthebt (bijvoorbeeld om een ​​weergave te maken voor AlertDialog), heb je geen andere manier dan nulldoor te geven . Doe dit dus om waarschuwingen te vermijden:

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

Antwoord 5, autoriteit 2%

Voor AlertDialogkan balgcode worden gebruikt

convertView = layoutInflater.inflate(R.layout.list_item, findViewById(android.R.id.content), false);

Antwoord 6, autoriteit 2%

Een leuke informatie die ik vond toen ik een manier zocht om dit op te lossen. Volgens Dave Smith,

Lay-outinflatie is de term die in de context van Android wordt gebruikt om aan te geven wanneer een XML-layoutbron wordt geparseerd en geconverteerd naar een hiërarchie van View-objecten.

De ViewGroupwaar hier om is gevraagd als onderdeel van de parameters van de inflate-methode wordt gebruikt om styling op een hoger niveau over te nemen. Hoewel het doorgeven van null onschuldig kan lijken, kan het later ernstige problemen voor uw app veroorzaken. Lees hier hiermeer over.


Antwoord 7

Hier is een afbeelding ter referentie:

voer hier de afbeeldingsbeschrijving in

return inflater.inflate(R.layout.some_layout, container, true); 
// for the last parameter use true, false or simply don't declare

Other episodes