Android: TabHostFactory.createTabContent не вызывается для всех вкладок? - PullRequest
1 голос
/ 17 августа 2011

У меня есть приложение, которому нужны вкладки с одним списком в содержимом каждой вкладки.Эти списки необходимо обновить несколько раз, не меняя вкладку.Списки представляют собой деревья возможных вариантов выбора, поэтому пользователь, например, щелкает элемент 4, и мне нужно обновить список, чтобы отобразить элементы под 4.

Самый простой (и, вероятно, самый уродливый) способ, который я нашел, чтобы выполнитьэто значит присоединить слушателя к списку «показанных в данный момент» и снова запустить «это» действие (с некоторыми дополнительными функциями, относящимися к элементу, по которому щелкнул пользователь), фактически воссоздав весь вид, вкладки и все остальное.Это позволяет мне сохранять независимость каждого состояния списков и делает поддержку спины достаточно легкой. - Я сказал, что это ужасно!

Чтобы это работало, я создаю вкладки внутри onCreate, например:

TabHost.TabSpec spec1 = tabHost.newTabSpec("TOC").setIndicator("TOC", res.getDrawable(R.drawable.ico_table_of_contents)).setContent(this);
tabHost.addTab(spec1);

TabHost.TabSpec spec2 = tabHost.newTabSpec("BLAH").setIndicator("BLAH", res.getDrawable(R.drawable.blah)).setContent(this);
tabHost.addTab(spec2);

.setContent (this)работает, потому что это действие расширяет TabActivity и реализует TabHost.TabContentFactory.Функция createTabContent возвращает следующее:

return from(this).inflate(R.layout.new_list, getTabHost().getTabContentView(), true);

независимо от того, на какой вкладке я нахожусь. После этого я обновляю список с помощью адаптера, например:

private void updateList(ArrayList<Element> items) {
  ElementAdapter adapter = new ElementAdapter(this, R.layout.element, items);
  ListView list = (ListView) findViewById(R.id.theListView);

  list.setOnItemClickListener(new AdapterView.OnItemClickListener() {...}
  list.setAdapter(adapter);
  adapter.notifyDataSetChanged();
}

Проблема в том, чточто первая вкладка отлично работает, а вторая нет.Ему нужно такое же представление, как и в первом (список, показывающий список элементов), но в нем ничего не отображается, просто вкладки.ArrayList, который я передаю, имеет элементы в обоих случаях.

Обходя код, я заметил, что в моих createTabs createTabContent называется ONCE, на tabHost.addTab (spec1) (для первой вкладки), но НЕпри добавлении второго.

Что дает?Почему вместо списка отображается пустой экран, если в обоих случаях есть элементы для отображения?

Надеюсь, это имеет смысл.Это странная проблема, чтобы объяснить, и я не уверен, что я имею много смысла.

Будем благодарны за любую помощь.

Спасибо

llappall

1 Ответ

0 голосов
/ 17 августа 2011

Я никогда не пытался использовать один и тот же TabContentFactory более одного раза.Я бы ожидал, что вы использовали здесь, чтобы работать, особенно учитывая параметр tag для createTabContent().

При этом попробуйте использовать несколько объектов TabContentFactory и посмотрите, поможет ли это (например, используйте экземпляры)анонимных внутренних классов).

...