ルートスタジオにnullを渡すと、この警告が表示されます。
ビュールートとしてnullを渡さないようにします(膨張したレイアウトのルート要素のレイアウトパラメータを解決する必要があります)。
getGroupView
にnull値を表示しています。助けてください。
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
メソッドのすべてのバージョンがどのように機能するかを説明し、ListView
およびAlertDialog
の例を示します。
http://www.doubleencore.com/2013/05/layout-inflation-as-intended/
#1を更新する
この答えも最近私を助けてくれました。 https://stackoverflow.com/a/5027921/1065835
あなたが本当にparent
を持っていないとき(例えばAlertDialog
のためのビューを作成するとき)、null
を渡す以外の方法はありません。警告を避けるためにこうしてください。
final ViewGroup nullParent = null;
convertView = layoutInflater.inflate(R.layout.list_item, nullParent);
何らかの理由で、layoutinflaterから膨らませる代わりにView.inflateを使用すると、lintエラーが消えます。このスレッドはGoogle検索の一番上にあるので、ここに投稿したいと思います...
view = View.inflate(context,R.layout.custom_layout,null);
これを解決する方法を探している間私が見つけた素晴らしい情報。デイブスミスによると、
レイアウトインフレーションは、XMLレイアウトリソースが解析されてViewオブジェクトの階層に変換されるタイミングを示すためにAndroidのコンテキスト内で使用される用語です。
Inflateメソッドのパラメータの一部は、より高いレベルのスタイリングを継承するために使用されるので、ここでViewGroup
が要求されます。nullを渡すと無害に見えることがありますが、実際には後でアプリケーションに深刻な問題を引き起こす可能性があります。これについてもっと読みなさい ここ 。
AlertDialog
の場合、以下のコードを使用できます
convertView = layoutInflater.inflate(R.layout.list_item, findViewById(Android.R.id.content), false);