wake-up-neo.com

Vermeiden Sie die Übergabe von null als Ansichtsstamm (es müssen Layoutparameter für das Stammelement des aufgeblasenen Layouts aufgelöst werden).

Das Übergeben von null für root studio gibt mir diese Warnung:

Vermeiden Sie die Übergabe von null als Ansichtsstamm (es müssen Layoutparameter für das Stammelement des aufgeblasenen Layouts aufgelöst werden).

In getGroupView wird ein Nullwert angezeigt. Bitte helfen Sie.

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

Anstatt zu tun

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

machen

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

Es wird mit dem angegebenen übergeordneten Element aufgeblasen, es wird jedoch nicht mit dem übergeordneten Element verknüpft.

340
Coeffect

Ich habe einen guten Artikel über LayoutInflater gefunden. Der Autor erklärt, wie alle Versionen der inflate -Methode funktionieren, und gibt Beispiele für ListView und AlertDialog.

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

Update Nr. 1

Diese Antwort hat mir kürzlich auch geholfen. https://stackoverflow.com/a/5027921/1065835

50
Maksim Dmitriev

Aus irgendeinem Grund lässt die Verwendung von View.inflate den Flusenfehler verschwinden, anstatt von einem Layoutinflater aus aufzublasen. Ich dachte, ich würde das hier posten, da dieser Thread ganz oben in der Google-Suche steht ...

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

Wenn Sie wirklich kein parent haben (zum Beispiel eine Ansicht für AlertDialog erstellen), haben Sie keine andere Möglichkeit, als null zu übergeben. Gehen Sie folgendermaßen vor, um eine Warnung zu vermeiden:

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

Eine nette Information, die ich gefunden habe, als ich nach einer Möglichkeit gesucht habe, diese zu lösen. Laut Dave Smith,

Layoutinflation ist der Begriff, der im Kontext von Android) verwendet wird, um anzugeben, wann eine XML-Layoutressource analysiert und in eine Hierarchie von Ansichtsobjekten konvertiert wird.

Das ViewGroup, das hier als Teil der Parameter der Inflate-Methode abgefragt wurde, wird verwendet, um das übergeordnete Styling zu erben. Die Übergabe von Null kann harmlos erscheinen und später ernsthafte Probleme für Ihre App verursachen. Lesen Sie mehr darüber hier .

4

Für AlertDialog kann der folgende Code verwendet werden

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