Проблемы с примером Android TabHost - PullRequest
8 голосов
/ 05 февраля 2010

Я пытался реализовать "продвинутый" пример tabwidget от Google. Но когда он пытается вызвать tabHost.addTab(spec);, я получаю трассировку стека от отладчика. Извините, у меня здесь нет трассировки стека, но мне интересно, была ли у других такая же проблема (так как в этом коде было много опечаток и отсутствующей информации, которая помешала мне даже компилировать.

Может ли кто-нибудь указать мне исправленную / работающую версию этого кода?

Требуется обновленная информация:

<activity android:name=".ArtistsActivity"></activity>
<activity android:name=".AlbumsActivity"></activity>
<activity android:name=".SongsActivity"></activity>

Ответы [ 4 ]

12 голосов
/ 11 февраля 2010

Я провел последний час или около того, изучая этот урок. Вот проблемы и исправления, с которыми я столкнулся:

Шаг 2: Если при создании действий вы не создаете их с помощью манифеста, вам необходимо добавить их в манифест вручную.

Добавьте эти строки в AndroidManifest.xml:

  <activity android:name=".AlbumsActivity"
                  android:label="@string/app_name"
                  android:theme="@android:style/Theme.NoTitleBar">
        </activity>
  <activity android:name=".ArtistsActivity"
                  android:label="@string/app_name"
                  android:theme="@android:style/Theme.NoTitleBar">
        </activity>
          <activity android:name=".SongsActivity"
                  android:label="@string/app_name"
                  android:theme="@android:style/Theme.NoTitleBar">
        </activity>

Шаг 3: Вам предлагается только создать файл ic_tab_artists.xml. Вам также нужно будет создать его для ic_tab_songs.xml и ic_tab_albums.xml. Вы можете просто продублировать файл ic_tab_artists.xml (или изменить спецификации вкладки HelloTabView.java, чтобы использовать файл Artist.xml для каждой вкладки).

Шаг 4: В третьей / последней строке в / res / layout / main есть опечатка (a; вместо a:)

      android:padding="5dp" />
    </LinearLayout>
</TabHost>

Шаг 6: Существует опечатка, которая использует вызовы mTabHost вместо tabHost. Измени это.

Как уже упоминалось, функция getIntent () в последней строке не подходит. Я просто вызываю вкладку на основе ее идентификатора. например:

tabHost.setCurrentTabByTag("albums");
9 голосов
/ 08 февраля 2010

Текущий пример TabHost на сайте разработчиков Android содержит одну ошибку, а также пропускает важный шаг, который не позволит запустить пример.

Сначала: В методе onCreate (), добавляемом в класс HelloTabWidget, делается попытка использовать объект TabHost с именем mTabHost. Это неверно, должно быть tabHost.

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

2 голосов
/ 21 марта 2010

Также

android:theme="@android:style/Theme.NoTitleBar"

у меня не работает, если я заменю его на

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

отлично работает.

1 голос
/ 22 апреля 2010

Пример, исправленный Тедом, также работает, если все три действия не включают строку:

android:theme="@android:style/Theme.NoTitleBar"

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

...