Я создал составной элемент управления, который я повторно использую в нескольких действиях. Этот элемент управления содержит несколько текстовых представлений и кнопок, а главное - 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 и повторно используются в нескольких случаях?