在新Intent中显示TabHost布局的问题

时间:2010-02-19 09:55:03

标签: android android-widget android-intent android-tabhost

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

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

  

02-18 22:23:11.937:   错误/ AndroidRuntime(5944):引起:   java.lang.RuntimeException:你的   内容必须有一个标识为TabH的标签   属性是'android.R.id.tabhost'

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

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

在第一个活动(MainActivity)中,我使用extras启动第二个intent(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示例时出现同样的错误:

Main.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.widget.TabHost.dispatchWindowFocusChanged(TabHost.java 285)        在android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java 640)        在android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java 640)        在android.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)        at java.lang.reflect.Method.invokeNative(Native   法)
       在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   方法)

9 个答案:

答案 0 :(得分:7)

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

  1. 删除R文件。
  2. 等待IDE生成文件。
  3. 利润!

答案 1 :(得分:3)

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

android:id="@+id/tabs" 

当我真正想要的是:

android:id="@android:id/tabs"

答案 2 :(得分:2)

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

您还可以考虑以编程方式构建标签视图:

    TabHost t = getTabHost();
    TabSpec tab = t.newTabSpec(label)
                   .setIndicator(label, icon)
                   .setContent(intent);
    t.addTab(tab);

答案 3 :(得分:2)

我也遇到过这个问题。我有一个XML文件没有在我的res / layout中正确地链接到我的代码。当我修改命名时,问题就消失了。

答案 4 :(得分:2)

即使我已经将我的main.xml更改为使用android:id="@android:id/tabhost",如所声明的错误,它仍然尝试使用旧名称。最后我发现文件res / layout-port / main.xml与main.xml完全相同,只是使用了错误的android:id。我必须偶然添加一个纵向视图,并且它保持旧值。修复肖像文件或删除它都可以解决我的问题。

答案 5 :(得分:1)

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

最后,我将我的布局文件重命名为更复杂和独特的东西,而ProGuard并没有搞砸链接。比降低ProGuard配置路径更容易。

所以我的问题类似于SapphireSun,虽然通过不同的过程表达(并且发布日食,只是为了让事情变得更加困难)。

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

答案 6 :(得分:1)

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

当你想在tabhost.it中运行tabhost时问题就出现了。

答案 7 :(得分:0)

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

由于这些二进制文件是在具有单独代码的单个机器上生成的,因此可能是错误发生的地方。

清理项目文件(Project - &gt; Clean)始终为我们解决了问题!

答案 8 :(得分:0)

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