3

我在 TabActivity 类型的新 Intent 中使用 TabHost 时遇到问题,希望您能指出正确的方向。有趣的是,当我尝试在原始 Intent 中查看它时它工作正常: setContentView(R.layout.main)

我得到一个“强制关闭”并且在 logcat 中,即使我的 Tabhost id =“@android:id/tabhost”,我也会收到以下错误:

02-18 22:23:11.937: ERROR/AndroidRuntime(5944): Caused by: java.lang.RuntimeException: 您的内容必须有一个 id 属性为 'android.R.id.tabhost' 的 TabHost

我在 Manifest.xml 文件中声明了第二个意图:XML:

<activity android:name=".NextActivity" android:label="@string/app_name" > 

在第一个活动 (MainActivity) 中,我启动了第二个意图 (NextActivity),带有附加功能,如下所示:

Intent nextActivity = new Intent(MainActivity.this,NextActivity.class); 
Bundle b_next=new Bundle(); 

b_next.putString("s_string", myString); 

nextActivity.putExtras(b_next); 

在我的 NextActivity.java 文件中,我得到了额外内容并尝试显示 TabHost 视图:

public class NextActivity extends TabActivity { 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 

        String myString; 
        Bundle b_initial; 

        b_initial = getIntent().getExtras(); 

        myString = b_initial.getString("s_string"); 

     setContentView(R.layout.main); 

        } 
}

我在 Android 开发者网站(Hellow View)上使用 TabHost 示例时遇到了同样的错误:

主要.xml:

<?xml version="1.0" encoding="utf-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <LinearLayout 
        android:orientation="vertical" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"> 
        <TabWidget 
            android:id="@android:id/tabs" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" /> 
        <FrameLayout 
            android:id="@android:id/tabcontent" 
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent"> 
            <TextView 
                android:id="@+id/textview1" 
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent" 
                android:text="this is a tab" /> 
            <TextView 
                android:id="@+id/textview2" 
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent" 
                android:text="this is another tab" /> 
            <TextView 
                android:id="@+id/textview3" 
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent" 
                android:text="this is a third tab" /> 
        </FrameLayout> 
    </LinearLayout> 
</TabHost>

先谢谢各位...

澄清:这是我从 LogCat 中真正得到的:

java.lang.NullPointerException
在 android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java 640) 在 android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java 640) 在 android.widget.TabHost.dispatchWindowFocusChanged(TabHost.java 285)。 view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java 640) 在 android.view.ViewRoot.handleMessage(ViewRoot.java 1645) 在 android.os.Handler.dispatchMessage(Handler.java 99) 在 android.os.Looper.loop(Looper. java 123) 在 android.app.ActivityThread.main(ActivityThread.java 3948) 在 java.lang.reflect.Method.invokeNative(Native Method)
在 java.lang.reflect.Method.invoke(Method.java 521) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java 782) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit .java 540) 在 dalvik.system.NativeStart.main(Native Method)

4

9 回答 9

7

我有同样的问题。幸运的是,有一个快速修复:

  1. 删除R文件。
  2. 等待您的 IDE 生成文件。
  3. 利润!
于 2011-06-23T17:46:41.530 回答
3

我复制并粘贴了代码,并注意到在 id 属性中我有:

android:id="@+id/tabs" 

当我真正想要的是:

android:id="@android:id/tabs"
于 2011-07-29T16:48:18.043 回答
2

我之前已经构建了 id 的 tabhosts android:id="@+id/tabhost"。这对你有用吗?

您还可以考虑以编程方式构建您的选项卡视图:

    TabHost t = getTabHost();
    TabSpec tab = t.newTabSpec(label)
                   .setIndicator(label, icon)
                   .setContent(intent);
    t.addTab(tab);
于 2010-02-19T15:42:29.947 回答
2

我也遇到了这个问题。我的资源/布局中有一个 XML 文件没有正确链接到我的代码。当我修复命名时,问题就消失了。

于 2010-09-30T02:35:41.780 回答
2

即使我已将 main.xml 更改为android:id="@android:id/tabhost"按照错误所述使用,它仍然尝试使用旧名称。最后我找到了与 main.xml 相同的文件 res/layout-port/main.xml,只是使用了错误的 android:id。我一定是不小心添加了一个纵向视图,并且它保留了旧值。修复肖像文件或删除它可以解决我的问题。

于 2011-09-23T15:51:13.690 回答
1

我也有这个错误。对我来说,它会在混淆后出现(通过 ProGuard),在混淆前它很好。

最后,我将我的布局文件重命名为更复杂和独特的东西,ProGuard 并没有弄乱链接。比沿着 ProGuard 配置路径更容易一些。

所以我的问题与 SapphireSun 类似,尽管通过不同的过程表达(和日食后,只是为了让事情变得更困难)。

这可能是获得此错误的更晦涩的方法之一,但我认为值得一提。

于 2011-02-03T07:42:28.400 回答
1

"public class NextActivity extends TabActivity"--将 TabActivity 更改为 ActivityGroup。

当您希望在 tabhost 中运行 tabhost 时发生问题时。没关系。

于 2011-08-06T02:38:42.580 回答
0

我遇到了这个问题以及'错误:未知选项'--no-crunch''。如果您在 Eclipse 中更新了 ADT 插件,但没有同时更新 SDK。在 Eclipse 中更新 SDK 管理器,为我解决了这个问题。

于 2011-11-16T06:24:39.627 回答
0

在使用 SVN 时,我在团队项目中遇到了同样的错误。有时,eclipse会从项目的bin文件夹上传classes.dex和resources.ap_,其他的通过SVN更新获取。

由于这些二进制文件是在具有单独代码的单独机器上生成的,这可能就是错误的来源。

清理项目文件(Project -> Clean)总是为我们解决了这个问题!

于 2011-07-23T18:00:47.303 回答