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

时间:2014-07-18 19:34:12

标签: android android-layout warnings layout-inflater

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

}

7 个答案:

答案 0 :(得分:333)

而不是做

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

DO

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

它将使用给定的父级对其进行充气,但不会将其附加到父级。

答案 1 :(得分:48)

我发现了一篇关于LayoutInflater的好文章。作者解释了inflate方法的所有版本的工作原理,并提供了ListViewAlertDialog

的示例

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