Изменение представления внутри TabHost (одно действие, несколько представлений) - PullRequest
4 голосов
/ 10 января 2011

прямо сейчас я использую в своем приложении tabhost с одной активностью и отдельными представлениями.

Tab Activity:

    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 голосов
/ 27 января 2011

вы можете использовать намерение, чтобы установить 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));

это будет работать для вас.

...