避免传递null作为视图根(需要parsing膨胀布局的根元素上的布局参数)

为root工作室传递null给了我这个警告:

避免传递null作为视图根(需要parsing膨胀布局的根元素上的布局参数)

它在getGroupView显示一个空值。 请帮忙。

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

而不是做

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

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

它会用给定的父母夸大它,但不会将其附加到父母。

我发现了一篇关于LayoutInflater的好文章。 作者解释了inflate方法的所有版本是如何工作的,并给出了ListViewAlertDialog例子

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

更新#1。

这个答案最近也帮助了我。 https://stackoverflow.com/a/5027921/1065835

当你真的没有任何parent (例如为AlertDialog创build视图)时,除了传递null之外别无它法。 所以这样做是为了避免警告:

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

在这里你去,出于某种原因使用View.inflate而不是从layoutinflater膨胀使lint错误消失。 因为这个post在Googlesearch的顶部,所以我想在这里发布…

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

我find一个很好的信息来寻找解决办法。据戴夫·史密斯(Dave Smith)

布局通货膨胀是在Android环境中使用的术语,用于指示XML布局资源何时被parsing并转换为View对象的层次结构。

ViewGroup在这里被要求作为膨胀方法的一部分参数用于inheritance更高级别的样式。虽然传递null看起来是无害的,它实际上可能会导致您的应用程序在以后严重的问题。 阅读更多关于这里 。