TabView 混合来自多个选项卡的内容
我正在使用 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);
}
}));
第一个选项卡应该如下所示:
但是,第一次进入活动时,它看起来像这样:
您看到的其他内容来自同一活动中的其他选项卡。
单击另一个选项卡然后返回第一个选项卡后,输出已修复(这就是我获得第一个屏幕截图的方式)。该行为是一致的,并且每次启动活动时都会发生。如果相关的话,我正在 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:
However, the first time that I enter the activity it looks like this:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我遇到了这个问题。我必须为每个 LinearLayout 定义一个白色背景。
并定义你的边界:
I had this problem. I had to define a white background for each of my LinearLayouts.
and define your border:
经过几个小时的摆弄,我找到了解决方案:默认情况下使每个选项卡的 LinearLayouts 不可见。
换句话说:
对于每个 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:
for each LinearLayout.