ビュールートとしてnullを渡さないでください(インフレートされたレイアウトのルート要素のレイアウトパラメーターを解決する必要があります)


230

ルートスタジオに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;
    }

}

回答:


364

する代わりに

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

行う

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

それは与えられた親でそれを膨らませますが、それを親に付けません。


26
@コエフェクトですが、アクティビティ内から膨張するときに何を使用すればよいですか?親の代わりに何を使うべきですか?
Alexander Kuznetsov

3
@AlexanderKuznetsov何をしようとしているかに依存すると思います。アクティビティのコンテンツを設定する場合は、を使用する必要がありますsetContentView(layoutId)。新しいビューを既存のViewGroupに追加しようとしている場合は、おそらく親を渡して、インフレーターに新しいビューをアタッチさせるだけです。
コエフェクト、2014年

@LucasTan私はTabHostへの参照をTabContentFactoryに保持し、それをインフレート時に親として使用すると思いますが、それが最善の解決策かどうかはわかりません。createTabContentメソッドが親/コンテキストを提供しないのは奇妙です。
Coeffect 2014年

4
同じ問題(なし親)実装時に立ち上がるonCreateInputView()ためInputMethodService
Ted Hopp

2
アラートダイアログのカスタムビューはどうですか?親はどうあるべきですか?
user25


38

ここで、何らかの理由で、layoutinflaterからインフレートする代わりにView.inflateを使用すると、lintエラーが消えます。このスレッドはGoogle検索の上部にあるので、ここに投稿すると思います...

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

31

本当に何もない場合parent(たとえばのビューを作成する場合AlertDialog)を渡す以外に方法はありませんnull。警告を避けるためにこれを行ってください:

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

59
リントをだまして動作させるよりも、抑制を行う方が良いでしょう。
StarWind0

2
この答えが正しいかわかりません。アクティビティのレイアウトファイルで最も外側のコンテナーのIDがViewGroup root = (ViewGroup) myActivity.findViewById(R.id.my_main_content);どこにあるかをうまく使用していmy_main_contentます。
ban-geoengineering

10
これのLintを抑制するには@SuppressLint("InflateParams")、メソッドの上に追加します。
ban-geoengineering 2017年

7

以下のためにAlertDialog怒鳴るコードを使用することができます

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

6

これを解決する方法を探しているときに見つけた素晴らしい情報です。デイブ・スミスによると、

レイアウトインフレは、Androidのコンテキスト内で使用される用語で、XMLレイアウトリソースが解析され、Viewオブジェクトの階層に変換される時期を示します。

ViewGroupそれは、後にアプリの深刻な問題原因実際には、無害に見えることができ、より高いレベルのstyling.While渡しヌルを継承するために使用されたインフレートメソッドパラメータの一部としてここにするためにできる頼まれて。詳しくはこちらを ご覧ください


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.