TabView 混合来自多个选项卡的内容

发布于 2024-12-10 05:30:19 字数 3701 浏览 0 评论 0原文

我正在使用 TabView 进行活动布局。不幸的是,我第一次进入活动时,TabView 同时显示所有选项卡的内容,从而创建损坏的输出。

我的布局使用 ImageView 作为背景,并在其顶部添加 TabHost。 ScrollView 之所以存在,是因为某些选项卡的内容需要滚动。我不会为每个选项卡使用单独的活动。

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">

    <ImageView android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:src="@drawable/background_claims"
        android:scaleType="centerCrop" />

    <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" />

            <ScrollView android:layout_width="fill_parent"
                android:layout_height="fill_parent">

                <FrameLayout android:id="@android:id/tabcontent"
                    android:layout_width="fill_parent" android:layout_height="fill_parent">

                    <LinearLayout android:id="@+id/overview_tab"
                        android:orientation="vertical" android:layout_width="fill_parent"
                        android:layout_height="wrap_content">
                    </LinearLayout>

                    <LinearLayout android:id="@+id/journey_tab"
                        android:orientation="vertical" android:layout_width="fill_parent"
                        android:layout_height="fill_parent">
                    </LinearLayout>

                    <LinearLayout android:id="@+id/delay_tab"
                        android:orientation="vertical" android:layout_width="fill_parent"
                        android:layout_height="fill_parent">
                    </LinearLayout>

                    <LinearLayout android:id="@+id/personal_tab"
                        android:orientation="vertical" android:layout_width="fill_parent"
                        android:layout_height="fill_parent">
                    </LinearLayout>

                    <LinearLayout android:id="@+id/ticket_tab"
                        android:orientation="vertical" android:layout_width="fill_parent"
                        android:layout_height="fill_parent">
                    </LinearLayout>

                </FrameLayout>
            </ScrollView>
        </LinearLayout>
    </TabHost>

</FrameLayout>

...为了简洁起见,我省略了 LinearLayouts 的内容。

LinearLayouts 作为选项卡添加到 Activity 的构造函数中:

    tabHost = getTabHost();
    tabHost.setOnTabChangedListener(this);

    tabHost.addTab(tabHost.newTabSpec(LIST1_TAB_TAG)
            .setIndicator(LIST1_TAB_TAG)
            .setContent(new TabContentFactory() {
                public View createTabContent(String arg0) {
                    return (LinearLayout) findViewById(R.id.overview_tab);
                }
            }));

第一个选项卡应该如下所示: Normal First Tabs

但是,第一次进入活动时,它看起来像这样: 损坏的选项卡

您看到的其他内容来自同一活动中的其他选项卡。

单击另一个选项卡然后返回第一个选项卡后,输出已修复(这就是我获得第一个屏幕截图的方式)。该行为是一致的,并且每次启动活动时都会发生。如果相关的话,我正在 HD2 上使用 Android 2.3.7 (CM7)。

非常感谢您的帮助!

I am using TabView for an activity layout. Unfortunately, the first time that I enter the acticity, TabView displays the content of all tabs at the same time, creating corrupted output.

My layout uses an ImageView for the background and adds on top of it the TabHost. The ScrollView is there because the content of some tabs requires scrolling. I do not use separate activities for each tab.

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">

    <ImageView android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:src="@drawable/background_claims"
        android:scaleType="centerCrop" />

    <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" />

            <ScrollView android:layout_width="fill_parent"
                android:layout_height="fill_parent">

                <FrameLayout android:id="@android:id/tabcontent"
                    android:layout_width="fill_parent" android:layout_height="fill_parent">

                    <LinearLayout android:id="@+id/overview_tab"
                        android:orientation="vertical" android:layout_width="fill_parent"
                        android:layout_height="wrap_content">
                    </LinearLayout>

                    <LinearLayout android:id="@+id/journey_tab"
                        android:orientation="vertical" android:layout_width="fill_parent"
                        android:layout_height="fill_parent">
                    </LinearLayout>

                    <LinearLayout android:id="@+id/delay_tab"
                        android:orientation="vertical" android:layout_width="fill_parent"
                        android:layout_height="fill_parent">
                    </LinearLayout>

                    <LinearLayout android:id="@+id/personal_tab"
                        android:orientation="vertical" android:layout_width="fill_parent"
                        android:layout_height="fill_parent">
                    </LinearLayout>

                    <LinearLayout android:id="@+id/ticket_tab"
                        android:orientation="vertical" android:layout_width="fill_parent"
                        android:layout_height="fill_parent">
                    </LinearLayout>

                </FrameLayout>
            </ScrollView>
        </LinearLayout>
    </TabHost>

</FrameLayout>

...where I ommit the content of the LinearLayouts for brevity.

The LinearLayouts are added as tabs on the Activity's constructor:

    tabHost = getTabHost();
    tabHost.setOnTabChangedListener(this);

    tabHost.addTab(tabHost.newTabSpec(LIST1_TAB_TAG)
            .setIndicator(LIST1_TAB_TAG)
            .setContent(new TabContentFactory() {
                public View createTabContent(String arg0) {
                    return (LinearLayout) findViewById(R.id.overview_tab);
                }
            }));

The first tab is supposed to look like this:
Normal First Tabs

However, the first time that I enter the activity it looks like this:
Corrupted tab

The additional content that you see is from other tabs in the same activity.

After I click another tab and then go back to the first, the output is fixed (that's how I got the first screenshot). The behaviour is consistent and happens every time I launch the activity. I am using Android 2.3.7 (CM7) on an HD2 if that's relevant.

Thanks a lot for any help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

海螺姑娘 2024-12-17 05:30:19

我遇到了这个问题。我必须为每个 LinearLayout 定义一个白色背景。

android:background="@drawable/border02"

并定义你的边界:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle" android:layout_width="wrap_content">
            <stroke android:width="0.5dp" android:color="#FF000000" />
            <solid android:color="#FFFFFFFF" />
            <padding android:left="0dp" android:top="0dp" android:right="0dp"
                android:bottom="0dp" />
            <corners android:radius="0dp" />
        </shape>
    </item>


</layer-list>

I had this problem. I had to define a white background for each of my LinearLayouts.

android:background="@drawable/border02"

and define your border:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle" android:layout_width="wrap_content">
            <stroke android:width="0.5dp" android:color="#FF000000" />
            <solid android:color="#FFFFFFFF" />
            <padding android:left="0dp" android:top="0dp" android:right="0dp"
                android:bottom="0dp" />
            <corners android:radius="0dp" />
        </shape>
    </item>


</layer-list>
甩你一脸翔 2024-12-17 05:30:19

经过几个小时的摆弄,我找到了解决方案:默认情况下使每个选项卡的 LinearLayouts 不可见。

换句话说:

android:visibility="gone"

对于每个 LinearLayout。

After a couple of hours fiddling with this, I found the solution: make the LinearLayouts of each tab invisible by default.

In other words:

android:visibility="gone"

for each LinearLayout.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文