【问题标题】:TabHost error when adding TabSpecs添加 TabSpecs 时出现 TabHost 错误
【发布时间】:2011-06-09 19:13:44
【问题描述】:

为清晰起见进行了编辑 所以......我一定是误解了如何正确使用 TabHosts,因为当我尝试添加一些 TabSpecs 时,我的代码在设置过程中完全崩溃了。然后是使用选项卡设置的菜单系统。我的代码看起来类似于:

public void myView extends RelativeLayout {

    // Other Views ...
    private TabHost myTabHost;
    private ExpandableListView listView1; // content for tab 1
    private ExpandableListView listView2; // content for tab 2

    public myView(Context context) {
        super(context);

        // some other stuff
        myTabHost = new TabHost(context);
        myTabHost.setId(R.id.myTabHost);

        listView1 = new ExpandableListView(context);
        listView1.setId(R.id.myExpandableListView1);

        listView2 = new ExpandableListView(context);
        listView2.setId(R.id.myExpandableListView2);

        TabSpec tab1 = myTabHost.getTabSpec(res.getString(R.string.tab1));
        tab1.setIndicator(res.getString(R.string.tab1), res.getDrawable(R.drawable.tab1));
        tab1.setContent(R.id.myExpandableListView1); // *********
        myTabHost.addTab(tab1);

        // do something similar for tab2..
    }

}

这是我目前正在使用的 Activity..

public void myActivity extends Activity {

    @Override
    public void onCreate(Bundle savedState) {
        super.onCreate(savedState);

        // do a little stuff..

        TabHost myTabHost = (TabHost) findViewById(R.id.myTabHost); // not sure if I'm supposed to set up the tabs in my activity, or not..
        // I tried it after it crashing in the view, and it still crashed in the activity..
        ExpandableListView myListView1 = (ExpandableListView) findViewById(R.id.myExpandableListView1);
        // set up expandable list view the way I want from data sources..

        // do something similar for myListView2
    }

}

据我了解,我不想扩展 TabActivity,因为这假设整个屏幕将是一个巨大的 TabHost,对吗?我只希望 TabHost 成为 Activity 的一小部分...问题是系统崩溃了我用********* 表示的地方。我想我只是不明白如何进行设置上标签?有人可以告诉我正确的方法吗,或者建议为什么它会崩溃?我想我还应该添加问题..要使用 TabHost,我必须使用 TabActivity 吗? (我不明白为什么我必须这样做,但 Android 可能会很有趣..)

奖金 我四处寻找,发现这个stackoverflow 链接关于没有tabactivities 的tabhosts。他们引用了LocalActivityManager。我得去读一读。。

【问题讨论】:

    标签: android android-tabhost


    【解决方案1】:

    我很确定您需要Activity 才能像您想要的那样使用TabHost。此外,TabHost 需要一个 非常 特定的布局才能工作,而您也没有。我认为您需要重新考虑您的方法。

    我很确定您已经看到 this,但以防万一。

    编辑

    可以从 Activity(而不是 TabActivity)扩展并将您的标签小部件放置在您想要的任何位置。但是,您必须在添加任何 TabSpecs 之前调用tabHostVariable.setup()

    【讨论】:

    • 我想我应该添加我的活动...我将编辑我的帖子以填写更多内容。
    • 在发布到这里之前,我确实尝试在 myTabHost 上运行 setup(),但这只是导致应用程序崩溃。我的问题是我没有 TabWidget 吗?文档说 TabHost 需要 TabWidget 和 FrameLayout - 但这也与 TabActivity 相关。我不确定 TabWidget 和 FrameLayout 是否在 TabHost 类的内部。 (它们是需要链接在一起的 3 个独立部分吗?)我已经多次查看 hello tabhost,但它似乎并没有真正解决我一直遇到的问题。阅读 TabHost 的文档也没有解释过。
    • 是的,你需要这三个。顶部的选项卡主机(不呈现任何内容)、选项卡小部件(将保存您的实际选项卡)和某个地方的选项卡内容(只要它们在选项卡主机内!)。
    • 我刚刚再次运行 setup() 并查看了异常,消息是“您的 TabHost 必须有一个 id 属性为 'android.R.id.tabs' 的 TabWidget”。所以我想这是我的第一个问题是我没有标签小部件。那么我想我需要知道如何正确地创建/设置tabwidget/tabcontent?我是否必须运行 myTabHost.getTabWidget() 然后为小部件修改该对象?框架布局呢? (正如您在我的代码中看到的那样,我希望内容是 ExpandableListViews ..)感谢您的帮助,顺便说一句。 :)
    • ok n/m.. 我现在明白了。我创建了一个 TabWidget(context) 对象并将其 ID 设置为 android.R.id.tabs 并创建了一个 FrameLayout(context) 对象并将其 ID 设置为 android.R.id.tabcontent 然后执行 TabHost.addView(TabWidget) 和TabHost.addView(FrameLayout) ...我正在努力让它正常工作。 (仍然给我错误,但现在是关于不同的东西,所以我应该没问题)。谢谢!
    【解决方案2】:

    您想扩展 TabActivity 以正确执行此操作。查看 http://developer.android.com/resources/tutorials/views/hello-tabwidget.html 以获得很棒的教程。

    【讨论】:

    • 我想我应该添加我的活动...我将编辑我的帖子以填写更多内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多