2012-03-24 97 views
1

我正在使用一個使用選項卡布局的Activity的Android應用程序。有兩個選項卡在一些TextView中顯示的內容之間切換。如何在TabHost中顯示兩個不同選項卡的相同佈局?

這意味着,兩個選項卡的規格指向相同的佈局(線性)爲內容,R.id.plantilla:

<?xml version="1.0" encoding="utf-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/tabhost" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <TabWidget 
     android:id="@android:id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

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

     <include layout="@layout/plantilla"/> 


    </FrameLayout> 
</LinearLayout> 

但是這僅適用如果切換到片2和回到1,即當活動啓動時,佈局「plantilla」在選項卡更改之前無法看到。這是我的問題。

什麼是最簡單的方法來解決這個問題?

PD:我曾試圖複製在tabhost XML行

<include layout="@layout/plantilla"> 

,但在這種情況下,我不能使用findViewById Java代碼中TextViews對象的訪問(R.id.someTextView) ;

回答

0

請從您的XML佈局中刪除的包括標籤,並留下一些簡單:

<?xml version="1.0" encoding="utf-8"?> 
<!-- Tab Host --> 
<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"> 

    <!-- Bottom tab bar --> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:padding="5dp"> 

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:padding="5dp" 
      android:layout_weight="1"/> 

     <!-- -5dip bottom margin for not showing the annoying bottom line --> 
     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="65dip" 
      android:layout_weight="0" 
      android:layout_marginBottom="-5dip"/> 

    </LinearLayout> 

</TabHost> 

從你TabActivity類只是把這個中的onCreate():

  //Set tab host 
     tabHost = getTabHost(); 

     //First Tab 
     TabSpec firstTabSpec = tabHost.newTabSpec("FirstTab");//title 
     firstTabSpec.setIndicator("FirstTab", getResources().getDrawable(R.drawable.item_first_tab)); //icon 
     Intent firstTabIntent = new Intent(this, FirstTab.class);//action 
     firstTabSpec.setContent(firstTabIntent);//set tab 

     //Second Tab 
     TabSpec secondTabSpec = tabHost.newTabSpec("SecondTab");//title 
     secondTabSpec.setIndicator("SecondTab", getResources().getDrawable(R.drawable.second_tab));//icon 
     Intent secondTabIntent = new Intent(this, FirstTab.class);//action 
     secondTabSpec.setContent(secondTabIntent);//set tab 

     //Add tabs to tab host 
     tabHost.addTab(firstTabSpec);//add first tab 
     tabHost.addTab(secondTabSpec);//add second tab which goes to your FirstTab.class 

您可以創建不同的活動爲您的標籤或使用一個單一的。

+0

感謝朋友,但此方法並不能幫助我,因爲我不想通過選項卡進行活動。我想要一個單獨的活動,TabActivity,這取決於選項卡標記顯示不同的內容。每個選項卡中顯示的內容都是從具有TabActivity的私人對象中讀取的。如果我有多個活動,我必須在我認爲比兩個選項卡的佈局相同的活動中分享這個對象。 – cs4r 2012-03-24 15:21:42

1

我不相信你可以使用include,我認爲你需要在xml中用不同的id標記實際定義你的佈局兩次。

或者您可以簡單地定義容器視圖,然後以編程方式向其添加視圖。我以前做過。以下是我做的:

tablayout

<?xml version="1.0" encoding="utf-8"?> 
<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:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="vertical" 
      android:padding="5dp" > 
      <TextView 
        android:id="@+id/setupheader" 
        android:layout_width="fill_parent" 
        android:layout_height="20dp" 
        android:textSize="15dp" /> 
      <TabWidget 
        android:id="@android:id/tabs" 
        android:layout_width="fill_parent" 
        android:layout_height="30dp" 
        android:gravity="bottom" /> 
      <FrameLayout 
        android:id="@android:id/tabcontent" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:padding="5dp" > 
        <!-- General Info Tab --> 
        <LinearLayout 
          android:id="@+id/general_tab" 
          android:layout_width="fill_parent" 
          android:layout_height="wrap_content" 
          android:orientation="vertical" > 
        </LinearLayout> 
        <!-- Tool Tab --> 
        <LinearLayout 
          android:id="@+id/tool_tab" 
          android:layout_width="fill_parent" 
          android:layout_height="wrap_content" 
          android:orientation="vertical" > 
          <ListView 
            android:id="@+id/list1" 
            android:layout_width="match_parent" 
            android:layout_height="0dp" 
            android:layout_weight="1" 
            android:drawSelectorOnTop="false" /> 
        </LinearLayout> 
        <!-- Offset Tab --> 
        <LinearLayout 
          android:id="@+id/offset_tab" 
          android:layout_width="fill_parent" 
          android:layout_height="wrap_content" 
          android:orientation="vertical" > 
          <ListView 
            android:id="@+id/list2" 
            android:layout_width="match_parent" 
            android:layout_height="0dp" 
            android:layout_weight="1" 
            android:drawSelectorOnTop="false" /> 
        </LinearLayout> 
        <!-- Notes Tab --> 
        <LinearLayout 
          android:id="@+id/note_tab" 
          android:layout_width="fill_parent" 
          android:layout_height="fill_parent" 
          android:orientation="vertical" > 
        </LinearLayout> 
      </FrameLayout> 
    </LinearLayout> 
</TabHost> 

以下是我的標籤活動(我已經刪除顯著的部分,但它應該表現不夠好,我怎麼去這樣做的標籤,而不針對每個單獨activites標籤)。

tabactivity

public class SetupDisplay extends TabActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.setupdetailmain); 

      Bundle extras = getIntent().getExtras(); 
      RowId = extras.getLong("RowId"); 
      StartTab = extras.getInt("StartTab"); 

      // *************************************************************** 
      // Set up the tabs in the tabhost 
      // *************************************************************** 
      tabHost = getTabHost(); 
      TabHost.TabSpec spec; 
      spec = tabHost.newTabSpec("General").setIndicator("General") 
          .setContent(R.id.general_tab); 
      tabHost.addTab(spec); 
      spec = tabHost.newTabSpec("Tools").setIndicator("Tools") 
          .setContent(R.id.tool_tab); 
      tabHost.addTab(spec); 
      spec = tabHost.newTabSpec("Offsets").setIndicator("Offsets") 
          .setContent(R.id.offset_tab); 
      tabHost.addTab(spec); 
      spec = tabHost.newTabSpec("Notes").setIndicator("Notes") 
          .setContent(R.id.note_tab); 
      tabHost.addTab(spec); 
      populateTabs(StartTab); 
    } 

    // *************************************************************** 
    // Clear views from linear layout tabs 
    // *************************************************************** 
    private void clearTabs() { 
      general.removeAllViews(); 
      notes.removeAllViews(); 
    } 

    // *************************************************************** 
    // Fill the tabs 
    // *************************************************************** 
    private void populateTabs(int TabShown) { 

      generaltab(); 
      tooltab(); 
      notestab(); 
      offsettab(); 

      tabHost.setCurrentTab(TabShown); 
    } 

    // *************************************************************** 
    // Fill the General tab 
    // *************************************************************** 
    private void generaltab() { 
     general = (LinearLayout) findViewById(R.id.general_tab); 
     String prgdisp = SETUPINFO_PGM1; 
     if (SETUPINFO_PGM2 != null) { 
      prgdisp = prgdisp + ", " + SETUPINFO_PGM2; 
     } 
     if (SETUPINFO_PGM3 != null) { 
      prgdisp = prgdisp + ", " + SETUPINFO_PGM3; 
     } 
     TextView programs = new TextView(this); 
     programs.setText("Program(s): " + prgdisp); 
     programs.setTextSize(20); 
     general.addView(programs); 

     if (SETUPINFO_KIT == null || SETUPINFO_KIT.equals("No Kit")) { 
     } else { 
      TextView kit = new TextView(this); 
      kit.setText("Kit: " + SETUPINFO_KIT); 
      kit.setTextSize(20); 
      general.addView(kit); 
     } 

     if (SETUPINFO_FIXTURE1 == null && SETUPINFO_FIXTURE2 == null) { 
     } else { 
      String fixtdisp = SETUPINFO_FIXTURE1; 
      if (SETUPINFO_FIXTURE2 != null) { 
       fixtdisp = fixtdisp + ", " + SETUPINFO_FIXTURE2; 
      } 
      TextView fixtures = new TextView(this); 
      fixtures.setText("Fixture(s): " + fixtdisp); 
      fixtures.setTextSize(20); 
      general.addView(fixtures); 
      TextView fixtureloc = new TextView(this); 
      fixtureloc.setText("Fixture Location: " + SETUPINFO_FIXTURELOC); 
      fixtureloc.setTextSize(20); 
      general.addView(fixtureloc); 
     } 

     if (SETUPINFO_VISE == null) { 
     } else { 
      TextView vise = new TextView(this); 
      vise.setText("Vise(s): " + SETUPINFO_VISE); 
      vise.setTextSize(20); 
      general.addView(vise); 
     } 
    } 

    // *************************************************************** 
    // Fill the Offset tab 
    // *************************************************************** 
    private void offsettab() { 
      wpccount = 0; 
      for (int i = 0; i < 20; i++) { 
        if (wpcdesc[i] != null) { 
          wpcdisplayhold[wpccount] = wpcid[i] + " - " + wpcdesc[i]; 
          wpcidhold[wpccount] = wpcid[i]; 
          wpcdeschold[wpccount] = wpcdesc[i]; 
          wpccount++; 
        } 
      } 
      wpcdisplay = new String[wpccount]; 
      for (int i = 0; i < wpccount; i++) { 
        wpcdisplay[i] = wpcdisplayhold[i]; 
      } 
      mWPCView = (ListView) findViewById(R.id.list2); 
      mWPCView.setAdapter(new ColorizingListAdapter(SetupDisplay.this, 
          wpcdisplay, "Offset")); 
      registerForContextMenu(mWPCView); 
    } 

    // *************************************************************** 
    // Fill the Notes tab 
    // *************************************************************** 
    private void notestab() { 
      notes = (LinearLayout) findViewById(R.id.note_tab); 
      notestxt = new TextView(this); 
      notestxt.setText(SETUPINFO_NOTES); 
      notestxt.setTextSize(15); 
      notes.addView(notestxt); 
    } 

} 

希望這有助於。

相關問題