2013-06-25 2 views
7

Я создаю пользовательский компонент LinearLayout. Он предназначен для имитации некоторых функций ListView, для использования в ScrollView, так как я не могу/не должен/не должен использовать ListView внутри ScrollView. Назовем это CustomListView. Кроме того, я создаю еще один пользовательский LinearLayout для представления каждого элемента в этом псевдо-списке, назовем его NewItemView.Развертывание макета XML для пользовательского LinearLayout создает избыточное представление LinearLayout

В любом случае, при инициализации NewItemView, я настраиваю его, раздувая компоновку XML. Формат XML объявляет LinearLayout в качестве корневого представления и не отличается от макетов, таких как simple_list_item_multiple_choice.xml.

В целом, происходит то, что основная деятельность имеет CustomListView. Мы вызываем addItem(Item item) на CustomListView, чтобы добавить новый элемент в список, который на самом деле создает новый NewItemView и заполняет его данными из класса Item.

Я раздувания в newListItem.initListItem(Context context), как так:

((Activity)getContext()) 
      .getLayoutInflater() 
      .inflate(R.layout.list_item, this, true); 

Это на самом деле работает! Тем не менее, проблема заключается в том, что при проверке с помощью монитора есть избыточный LinearLayout, просто сидящий вокруг каждого элемента в списке. Я понимаю, что это вообще плохая идея. Там LinearLayout для CustomListView, то для каждого элемента есть LinearLayout, с одним ребенком; a LinearLayout! Этот последний содержит настоящих детей.

Я ожидаю, что это как-то связано с тем, что я создаю настраиваемый компонент, основанный на LinearLayout, а затем раздувая макет с LinearLayout в его корне.

ответ

5

Да, это тег merge. Просто замените свой корень LinearLayout тегом на merge, и это должно делать то, что вам нужно.

См. this blog post.

Смежные вопросы