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;
}
}
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.
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
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);
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);
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 .
Für AlertDialog
kann der folgende Code verwendet werden
convertView = layoutInflater.inflate(R.layout.list_item, findViewById(Android.R.id.content), false);