2011-01-10 3 views
4

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

Tab активность:

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); 

Layout

<?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?

Заранее спасибо.

+0

Вы когда-нибудь это понимали? Я смотрю на что-то подобное. –

+0

Просто см. [Этот пример] (http://ericharlow.blogspot.in/2010/09/experience-multiple-android-activities.html). Надеюсь, это поможет вам. –

ответ

0

Вы можете использовать намерение, чтобы указать активность в качестве содержимого вашей вкладки, и это действие может вызывать другие действия, будь то 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)); 

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

+0

shure, но это запустит 'newActivity' не внутри Tab, а в одном окне ... –

Смежные вопросы