Избегайте передачи 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; } } 

Вместо того, чтобы делать

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

делать

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

Он раздует его с данным родителем, но не привяжет его к родительскому.

Я нашел хорошую статью о LayoutInflater . Автор объясняет, как работают все версии метода AlertDialog и приводятся примеры 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); 

Здесь ya go, почему-то использование View.inflate, а не раздувание с layoutinflater, приводит к исчезновению ошибки lint. Думаю, я бы разместил это здесь, так как этот поток находится на вершине поиска Google …

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

Хорошая информация, которую я нашел, ища способ решить эту проблему. Согласно Дейву Смиту,

Макетная инфляция – это термин, используемый в контексте Android, чтобы указать, когда разворачивается ресурс макета XML и преобразуется в иерархию объектов View.

ViewGroup был запрошен здесь, поскольку часть параметров метода inflate используется для наследования стиля более высокого уровня. Если передача null может показаться безобидной, это может вызвать серьезные проблемы для вашего приложения позже. Подробнее об этом читайте здесь .

Intereting Posts
Работа с изображениями в разработке приложений для Android Почему все действия / классы отображаются в списке приложений при установке? Echoprint codegen для Java / Android Не может прокручивать ViewPager при касании TextView (с помощью android: gravity = "center") в нем Android | Остановить TabLayout перезагрузить / обновить мои фрагменты Создайте конверт для мыла с заголовком безопасности в android, используя ksoap2 Вращение изображения с opencv в android разрезает края изображения Акселерометр останавливает доставку образцов, когда экран выключен на Droid / Nexus One даже с WakeLock Значок ActionBarDrawerToggle () не может быть установлен в ActionBar в Android SDK 5 Установка выбранной TAB с небольшим треугольником под ней Как создать фон с полосками, используя фигуры, а не изображение Что означает «.line» в синтаксисе кода smali? (Android-Smali Code) Для Android-карты api v2 Описание ссылается на не существующую библиотеку google-play-services_lib \ bin \ google-play-services_lib.jar Как сохранить приложение в фоновом режиме? Продолжать собирать данные? Открытие программных настроек Android