避免将null作为视图根(需要在膨胀的布局根元素上解析布局参数)

为根工作室传递null会给我这样的警告:

避免将null作为视图根(需要在膨胀布局的根元素上解析布局参数)

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


}
100531 次浏览

而不是做

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 < / p >

在寻找解决这个问题的方法时,我发现了一个很好的信息。根据戴夫·史密斯的说法,

布局膨胀是在Android上下文中使用的术语,用于指示XML布局资源何时被解析并转换为View对象的层次结构。

这里要求的ViewGroup作为充气方法参数的一部分,用于继承更高级别的样式。虽然传递null看起来是无害的,但它实际上会在以后给你的应用程序带来严重的问题。阅读更多关于这个在这里

编辑:

在写这个答案的时候,我不知道棉绒抑制。最好压制Lint而不是欺骗IDE。将这个添加到行或方法之上:

@SuppressLint("InflateParams")

旧的回答:

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

final ViewGroup nullParent = null;
convertView = layoutInflater.inflate(R.layout.list_item, nullParent);
这里,由于某种原因,使用视图。膨胀而不是从布局膨胀使绒毛错误消失。 我想我应该把这个贴在这里,因为这个线程在谷歌搜索的顶部…

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

对于AlertDialog可以使用波纹代码

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

这里有一张图片供参考:

enter image description here

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