为root studio传递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;
}
}
答案 0 :(得分:333)
而不是做
convertView = infalInflater.inflate(R.layout.list_item, null);
DO
convertView = infalInflater.inflate(R.layout.list_item, parent, false);
它将使用给定的父级对其进行充气,但不会将其附加到父级。
答案 1 :(得分:48)
我发现了一篇关于LayoutInflater
的好文章。作者解释了inflate
方法的所有版本的工作原理,并提供了ListView
和AlertDialog
http://www.doubleencore.com/2013/05/layout-inflation-as-intended/
更新#1。
这个答案最近对我有所帮助。 https://stackoverflow.com/a/5027921/1065835
答案 2 :(得分:26)
当你真的没有parent
时(例如为AlertDialog
创建视图),除了传递null
之外别无他法。所以这样做是为了避免警告:
final ViewGroup nullParent = null;
convertView = layoutInflater.inflate(R.layout.list_item, nullParent);
答案 3 :(得分:25)
在这里,由于某种原因,使用View.inflate而不是从layoutinflater中膨胀会使lint错误消失。 以为我会在这里发布这个帖子,因为这个帖子位于谷歌搜索的顶部......
view = View.inflate(context,R.layout.custom_layout,null);
答案 4 :(得分:3)
我在寻找解决方法的过程中找到的一个很好的信息。根据Dave Smith的说法,
布局膨胀是在Android上下文中使用的术语,用于指示何时解析XML布局资源并将其转换为View对象的层次结构。
这里要求ViewGroup
作为inflate方法参数的一部分用于继承更高级别的样式。虽然传递null似乎无害,但它实际上可能会在以后为您的应用程序造成严重问题。详细了解此here。
答案 5 :(得分:1)
对于AlertDialog
可以使用以下代码
convertView = layoutInflater.inflate(R.layout.list_item, findViewById(android.R.id.content), false);
答案 6 :(得分:0)
here is a picture for reference
return inflater.inflate(R.layout.some_layout, container, true);
//or false or even not declare