Android TabHost实例的问题

8
我一直在尝试实现谷歌的“高级”tabwidget示例。但是,当它尝试调用tabHost.addTab(spec);时,我从调试器中得到了一个堆栈跟踪。很抱歉,我这里没有堆栈跟踪,但我想知道其他人是否遇到了同样的问题(因为这段代码有很多错别字和缺少信息,甚至无法编译)。
有人能指向一个已更正/运行版本的代码吗?
需要更新的信息如下:
<activity android:name=".ArtistsActivity"></activity>
<activity android:name=".AlbumsActivity"></activity>
<activity android:name=".SongsActivity"></activity>

我昨晚刚按照那个例子做了一遍,结果很好。不过我没有复制粘贴代码,所以可能会有错误。给我们你的堆栈跟踪信息,我们可以帮助你解决问题。 - Jeremy Logan
一个新的Android开发者可能需要按照这里所述的语法,因为它在任何先前的教程中都没有提到,但是他们似乎已经更新了教程,在第二步中简要提到了这个要求:“将此复制到每个三个活动,并将相应的<activity/>标签添加到Android清单文件中”(2010年12月20日)。如果有人需要,完整的activity语法参考可在developer.android.com上获得。 - patridge
4个回答

12

我花了最近一小时左右的时间浏览了那个教程。以下是我处理过的问题和解决方法:

第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>

第三步:你只被要求创建ic_tab_artists.xml文件。你还需要为ic_tab_songs.xml和ic_tab_albums.xml创建一个文件。可以简单地复制ic_tab_artists.xml(或者更改HelloTabView.java选项卡规格,使用每个选项卡的artists.xml文件)。

第四步:/res/layout/main下倒数第三行存在一个错别字(分号代替了冒号)。

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

步骤6: 有一个错别字将mTabHost拼写成了tabHost。请更改它。

如前所述,最后一行的getIntent()函数不合适。我只是根据标签的id调用标签,例如:

tabHost.setCurrentTabByTag("albums");

9
当前 Android 开发者网站上的 TabHost 示例 存在一个错误,并且还遗漏了一个重要步骤,这会导致示例无法运行。
首先: 在 HelloTabWidget 类中添加的 onCreate() 方法试图使用名为 mTabHost 的 TabHost 对象。这是无效的,应该改为 tabHost。
其次: 教程遗漏了你需要将每个活动添加到 AndroidManifest.xml 中的细节。如果没有这个步骤,代码将无法正常工作,每次尝试执行都会出现“强制关闭”的情况。

我在另一个网站上看到了这个提及。我会找到它,进行修改并在验证后接受。谢谢。 - KevinDTimm
“elsewhere”的地址是http://code.google.com/p/android/issues/detail?id=4183,但我还没有检查过。今晚希望能够检查。 - KevinDTimm
@GrandPrix:天啊,我希望谷歌能够修复他们的示例。它们仍然是错误的!今天我也遇到了完全相同的问题,让我发疯了。非常感谢你提供的答案。 :) - Dave

2

同时,对于我来说,

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

不起作用,如果我将其替换为

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

它可以正常工作。


1

这个例子在 Ted 的修正下,即使三个活动都不包括该行,也可以正常工作:

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

如果您想要在选项卡标签之外还有一个标题栏,这将非常有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接