Android Compound Controls - раздувать из XML - PullRequest
0 голосов
/ 19 мая 2011

Я создал составной элемент управления, который я повторно использую в нескольких действиях. Этот элемент управления содержит несколько текстовых представлений и кнопок, а главное - ListView. Я определяю XML в файле макета и в конструкторе этого составного элемента управления раздуваю XML следующим образом:

    String service = Context.LAYOUT_INFLATER_SERVICE;
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(service);
    inflater.inflate(R.layout.map_menu, this, true);

Макет XML содержит ListView, а также в конструкторе этот составной элемент управления будет обрабатывать настройку адаптера (мой адаптер расширяет ArrayAdapter) и массив для него, например:

    ListView tableOfContentsList = (ListView) findViewById(R.id.tocListView);
    _layerAdapter = new LayerAdapter(context, R.layout.toc_layer_item, _layers);
    tableOfContentsList.setAdapter(_layerAdapter);

Этот составной элемент управления используется в двух активностях - одно из этих действий вызывает другое. Связь между этими двумя видами деятельности не предусмотрена.

Вот моя проблема. Когда составной элемент управления создается в начальном действии, вышеуказанный код вызывается для установки адаптера этого элемента управления. Затем, когда второе действие создано и перемещено, конструктор снова вызывается в этом втором экземпляре элемента управления. Это, кажется, имеет побочный эффект на первый контроль, расположенный в начальной деятельности. Второй элемент управления, кажется, перезаписывает части адаптера из первого элемента управления - потому что в основном первый адаптер не будет функционировать после вызова конструктора для второго элемента управления.

Я предполагаю, что, поскольку я ссылаюсь на идентификатор ресурса ListView в обоих элементах управления, Android удаляет адаптер из первого ListView при создании второго ListView - потому что он видит оба ListView с одинаковым идентификатором ресурса? Это возможно?

Раньше у меня были проблемы в этом точно таком же случае - когда несколько составных элементов управления используются в разных действиях (и несколько раз в одном действии) - и проблема была из-за раздувания из макета XML. Мое решение этой предыдущей проблемы состояло в том, чтобы избавиться от раздувания из макета и вместо этого создавать объекты с помощью кода. Это было приемлемо, потому что эти составные элементы управления были намного проще и содержали только два представления - однако я чувствую, что в приведенном выше случае ListView, где мой составной элемент управления имеет по меньшей мере десять представлений, это не является приемлемым решением для определения каждого представления в коде. Мне нужен макет XML.

Кто-нибудь когда-либо сталкивался с подобным конфликтным поведением при использовании пользовательских составных элементов управления, которые надуваются из XML и повторно используются в нескольких случаях?

1 Ответ

1 голос
/ 19 мая 2011

Насколько я понимаю, Android должен создавать новый экземпляр виджетов каждый раз, когда вы надуваете XML. У вас есть статические члены в вашем классе составных виджетов?

...