更改TabHost中的视图(一个活动,多个视图)

时间:2011-01-10 19:31:51

标签: android view tabs android-tabhost

现在我正在我的应用程序tabhost中使用单个活动和单独的视图。

标签活动:

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    TabHost tabs = (TabHost) findViewById(R.id.tabhost);        
    tabs.setup();

    TabHost.TabSpec spec = tabs.newTabSpec(TAB_HOTELS);
    spec.setContent(R.id.tab1);
    spec.setIndicator("Hotels");
    tabs.addTab(spec);

    spec = tabs.newTabSpec(TAB_LAST_MINUTE);
    spec.setContent(R.id.tab2);
    spec.setIndicator("Last Minute");
    tabs.addTab(spec);

布局

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+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">
            <LinearLayout android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:id="@+id/tab1"
                android:orientation="vertical">
                <ListView android:id="@+id/listaLocalita"
                    android:layout_width="fill_parent" android:layout_height="wrap_content" />
            </LinearLayout>

            <LinearLayout android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:id="@+id/tab2"
                android:orientation="vertical" android:paddingTop="60px">
                <TextView android:layout_width="fill_parent"
                    android:layout_height="100px" android:text="This is tab 2"
                    android:id="@+id/txt2" />
            </LinearLayout>
        </FrameLayout>
    </LinearLayout>
</TabHost>

只要我使用一个级别的深度,事情就会很好。不幸的是现在我需要让其中一个标签像下面一样工作:

选项卡加载ListView与城市列表,用户点击城市名称,选项卡的内容被替换为酒店列表,用户选择酒店并始终在同一选项卡中,酒店的信息被加载。

我如何实现这种情况? LayoutInflater?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以使用intent将Activity设置为选项卡内容,此活动可以调用其他活动,listView或任何其他活动。

/** tid1 is firstTabSpec Id. Its used to access outside. */
        TabSpec MainTab = tabHost.newTabSpec("tag1");
        TabSpec SearchTab = tabHost.newTabSpec("tag2");
        TabSpec MessageTab = tabHost.newTabSpec("tag3");
        TabSpec ServicesTab = tabHost.newTabSpec("tag4");
        TabSpec SettingsTab = tabHost.newTabSpec("tag5");

        MainTab.setIndicator("Main", res.getDrawable(R.drawable.anchor_36));
        MainTab.setContent(new Intent(this, MainView.class));

    SearchTab.setIndicator("Search", res.getDrawable(R.drawable.clock_36));
    SearchTab.setContent(new Intent(this, SearchView.class));

    MessageTab.setIndicator("Messages", res
            .getDrawable(R.drawable.dialog_36));
    MessageTab.setContent(new Intent(this, MessagesView.class));

    ServicesTab.setIndicator("Services", res
            .getDrawable(R.drawable.cloud_36));
    ServicesTab.setContent(new Intent(this, ServicesView.class));

    SettingsTab.setIndicator("Settings", res
            .getDrawable(R.drawable.settings_36));
    SettingsTab.setContent(new Intent(this, SettingsView.class));

    /** Add tabSpec to the TabHost to display. */
    tabHost.addTab(MainTab);
    tabHost.addTab(SearchTab);
    tabHost.addTab(MessageTab);
    tabHost.addTab(ServicesTab);
    tabHost.addTab(SettingsTab);

现在在加载的活动中,您可以使用像

这样的代码
StartActivity(new intent(currentActivity.this, newActivity.class));

这对你有用。