2011-03-17 29 views
0

我正試圖創建一個具有多個活動的選項卡式界面。作爲標籤的一部分,我已經創建並設置一個XML文件tabhost像這樣:如何在使用製表符時設置新的xml佈局

<?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 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_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" 
       android:padding="5dp" /> 
    </LinearLayout> 
</TabHost> 

這就是所謂的在我的Tabs.class文件,該文件是這樣的:

package com.system.kenetix; 

import android.app.TabActivity; 
import android.content.Intent; 
import android.content.res.Resources; 
import android.os.Bundle; 
import android.widget.TabHost; 

public class Tabs extends TabActivity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tabs); 

     Resources res = getResources(); // Resource object to get Drawables 
     TabHost tabHost = getTabHost(); // The activity TabHost 
     TabHost.TabSpec spec; // Resusable TabSpec for each tab 
     Intent intent; // Reusable Intent for each tab 

     // Create an Intent to launch an Activity for the tab (to be reused) 
     intent = new Intent().setClass(this, Availability.class); 
     // Initialize a TabSpec for each tab and add it to the TabHost 
     spec = tabHost.newTabSpec("Availability").setIndicator("Booking", 
       res.getDrawable(R.drawable.kenetix_tab_available)) 
      .setContent(intent); 
     tabHost.addTab(spec); 

     // Do the same for the other tabs 
     // Create an Intent to launch an Activity for the tab (to be reused) 
     intent = new Intent().setClass(this, RoomsAvailable.class); 
     spec = tabHost.newTabSpec("Room").setIndicator("Rooms", 
          res.getDrawable(R.drawable.kinetix_tab_rooms)) 
         .setContent(intent); 
     tabHost.addTab(spec); 

     // Do the same for the other tabs 
     // Create an Intent to launch an Activity for the tab (to be reused) 
     intent = new Intent().setClass(this, CustomerDetails.class); 
     spec = tabHost.newTabSpec("Customer").setIndicator("Customer", 
          res.getDrawable(R.drawable.kinetix_tab_customer)) 
         .setContent(intent); 
     tabHost.addTab(spec); 

     intent = new Intent().setClass(this, Payment.class); 
     spec = tabHost.newTabSpec("Payment").setIndicator("Payment", 
          res.getDrawable(R.drawable.kinetix_tab_payment)) 
         .setContent(intent); 
     tabHost.addTab(spec); 

     intent = new Intent().setClass(this, Extras.class); 
     spec = tabHost.newTabSpec("Extras").setIndicator("Extras", 
          res.getDrawable(R.drawable.kinetix_tab_extras)) 
         .setContent(intent); 
     tabHost.addTab(spec); 

     tabHost.setCurrentTab(0); 
    } 
} 

然後,我有個人類我的每個標籤和一個XML文件來設置內容(按鈕,旋轉器等),像這樣:

package com.system.kenetix; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.Spinner; 
import android.widget.Toast; 

public class Availability extends Activity { 
    /** Called when the activity is first created. */ 
    Intent intent = null; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.availability); 

    /*Nights Spinner*/ 

    //Create an instance of the Number of Nights spinner 
    Spinner NumNightsSpinner = (Spinner) findViewById(R.id.NumAdultsSpinner); 

    //Create an ArrayAdapter for the Number of Nights spinner 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.NumNights_array, android.R.layout.simple_spinner_item); 

    //Set the adapter layout 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    //Apply the adapter layout to the Number of Nights spinner 
    NumNightsSpinner.setAdapter(adapter); 
    NumNightsSpinner.setOnItemSelectedListener(new MyOnNumNightsSelectedListener()); 

    /*Adults Spinner*/ 

    //Create an instance of the Number of Adults spinner 
    Spinner NumAdultsSpinner = (Spinner) findViewById(R.id.NumAdultsSpinner); 

    //Create an ArrayAdapter for the Number of adults spinner 
    ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(this, R.array.NumAdults_array, android.R.layout.simple_spinner_item); 

    //Set the adapter layout 
    adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    //Apply the adapter layout to the Number of Adults spinner 
    NumAdultsSpinner.setAdapter(adapter); 
    NumAdultsSpinner.setOnItemSelectedListener(new MyOnNumAdultsSelectedListener()); 

    /*Children Spinner*/ 

    //Create an instance of the Number of Children spinner 
    Spinner NumChildSpinner = (Spinner) findViewById(R.id.NumChildSpinner); 

    //Create an ArrayAdapter for the Number of Children spinner 
    ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(this, R.array.NumChild_array, android.R.layout.simple_spinner_item); 

    //Set the adapter layout 
    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    //Apply the adapter layout to the Number of Children spinner 
    NumChildSpinner.setAdapter(adapter); 
    NumChildSpinner.setOnItemSelectedListener(new MyOnNumChildSelectedListener()); 

    Button CheckAvailable = (Button) findViewById(R.id.CheckAvailabilityBtn); 
    CheckAvailable.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      intent = new Intent(v.getContext(), RoomsAvailable.class); 
      startActivity(intent); 
     } 
    }); 
} 

//Listener for the selected item from the number of nights spinner 
public class MyOnNumNightsSelectedListener implements OnItemSelectedListener { 
    public void onItemSelected(AdapterView<?> parent,View view, int pos, long id){ 

     //If no number of nights has been selected or onCreate occurs cancel the toast 
     if (parent.getItemAtPosition(pos).toString().equals("0")){ 
      Toast.makeText(parent.getContext(), "You selected " + parent.getItemAtPosition(pos).toString() + " night(s)", Toast.LENGTH_LONG).cancel(); 
     } 

     //Else create a toast stating the number of nights selected 
     else{ 
     Toast.makeText(parent.getContext(), "You selected " + parent.getItemAtPosition(pos).toString() + " night(s)", Toast.LENGTH_LONG).show(); 
     } 
    } 

    public void onNothingSelected(AdapterView<?> parent) { 
     // TODO Auto-generated method stub 

    } 

} 
//Listener for the selected item from the number of adults spinner 
public class MyOnNumAdultsSelectedListener implements OnItemSelectedListener { 
    public void onItemSelected(AdapterView<?> parent,View view, int pos, long id){ 

     //If no number of nights has been selected or onCreate occurs cancel the toast 
     if (parent.getItemAtPosition(pos).toString().equals("0")){ 
      Toast.makeText(parent.getContext(), "You selected " + parent.getItemAtPosition(pos).toString() + " adults", Toast.LENGTH_LONG).cancel(); 
     } 

     else if (parent.getItemAtPosition(pos).toString().equals("1")){ 
      Toast.makeText(parent.getContext(), "You selected " + parent.getItemAtPosition(pos).toString() + " adult", Toast.LENGTH_LONG).cancel(); 
     } 

     //Else create a toast stating the number of nights selected 
     else{ 
     Toast.makeText(parent.getContext(), "You selected " + parent.getItemAtPosition(pos).toString() + " adult(s)", Toast.LENGTH_LONG).show(); 
     } 
    } 

    public void onNothingSelected(AdapterView<?> parent) { 
     // TODO Auto-generated method stub 
     //Do Nothing 
    } 
} 
//Listener for the selected item from the number of adults spinner 
public class MyOnNumChildSelectedListener implements OnItemSelectedListener { 
    public void onItemSelected(AdapterView<?> parent,View view, int pos, long id){ 

     //If no number of nights has been selected or onCreate occurs cancel the toast 
     if (parent.getItemAtPosition(pos).toString().equals("0")){ 
      Toast.makeText(parent.getContext(), "You selected " + parent.getItemAtPosition(pos).toString() + " children", Toast.LENGTH_LONG).cancel(); 
     } 
     else if (parent.getItemAtPosition(pos).toString().equals("1")){ 
      Toast.makeText(parent.getContext(), "You selected " + parent.getItemAtPosition(pos).toString() + " child", Toast.LENGTH_LONG).show(); 
     } 

     //Else create a toast stating the number of nights selected 
     else{ 
     Toast.makeText(parent.getContext(), "You selected " + parent.getItemAtPosition(pos).toString() + " children", Toast.LENGTH_LONG).show(); 
     } 
    } 

    public void onNothingSelected(AdapterView<?> parent) { 
     // TODO Auto-generated method stub 
     //Do Nothing 
    } 
} 

} 

,並與此而來的XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/linearLayout1" android:background="@color/custom_theme_color" 
    android:layout_width="match_parent" android:layout_height="wrap_content" 
    android:baselineAligned="false" android:orientation="vertical"> 
    <TableLayout android:layout_width="wrap_content" 
     android:layout_alignParentLeft="true" android:layout_height="wrap_content" 
     android:id="@+id/tableLayout1" android:stretchColumns="1" 
     android:layout_weight="1"> 

     <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" 
      android:layout_height="wrap_content"> 
      <ImageButton android:src="@drawable/icon" 
       android:layout_height="wrap_content" android:layout_width="wrap_content" 
       android:id="@+id/QuickRoomSelect" android:layout_weight="1" /> 
      <ImageButton android:src="@drawable/icon" 
       android:layout_height="wrap_content" android:layout_width="wrap_content" 
       android:id="@+id/QuickCustomerDetails" android:layout_weight="1" /> 
      <ImageButton android:src="@drawable/icon" 
       android:layout_height="wrap_content" android:layout_width="wrap_content" 
       android:id="@+id/imageButton1" android:layout_weight="1" /> 
     </TableRow> 
    </TableLayout> 

    <TextView android:layout_width="match_parent" 
     android:textColor="@color/custom_theme_text_color" android:id="@+id/availabilityLbl" 
     android:text="@string/AvailableLbl" android:layout_height="wrap_content" 
     android:layout_weight="1" /> 

    <Button android:layout_height="wrap_content" android:id="@+id/DateFromBtn" 
     android:layout_width="match_parent" android:text="@string/DateFromBtn" 
     android:layout_weight="1" /> 
    <TextView android:textColor="@color/custom_theme_text_color" 
     android:layout_height="wrap_content" android:id="@+id/NumNightsLdl" 
     android:text="@string/NumNightsLbl" android:layout_width="wrap_content" 
     android:layout_weight="1"></TextView> 
    <Spinner android:layout_height="wrap_content" android:id="@+id/NumAdultsSpinner" 
     android:layout_width="wrap_content" android:layout_weight="1"></Spinner> 

    <TableLayout android:layout_height="wrap_content" 
     android:id="@+id/tableLayout2" android:layout_width="match_parent" 
     android:layout_weight="1"> 
     <TableRow android:id="@+id/tableRow3" android:layout_height="wrap_content" 
      android:layout_width="match_parent" android:layout_weight="1"> 
      <TextView android:textColor="@color/custom_theme_text_color" 
       android:layout_height="wrap_content" android:id="@+id/NumAdultsLbl" 
       android:text="@string/NumAdultsLbl" android:layout_weight="2"></TextView> 
      <TextView android:textColor="@color/custom_theme_text_color" 
       android:layout_height="wrap_content" android:id="@+id/NumChildLbl" 
       android:layout_weight="2" android:text="@string/NumChildLbl"></TextView> 
     </TableRow> 
     <TableRow android:id="@+id/tableRow2" android:layout_width="match_parent" 
      android:layout_height="wrap_content" android:layout_weight="1"> 
      <Spinner android:layout_height="wrap_content" android:id="@+id/NumNightsSpinner" 
       android:layout_width="wrap_content" android:layout_weight="1"></Spinner> 
      <Spinner android:layout_height="wrap_content" android:id="@+id/NumChildSpinner" 
       android:layout_width="wrap_content" android:layout_weight="1"></Spinner> 
     </TableRow> 
    </TableLayout> 

    <Button android:layout_width="match_parent" android:id="@+id/CheckAvailabilityBtn" 
     android:layout_height="wrap_content" android:text="@string/CheckAvailableBtn" 
     android:layout_weight="1" /> 

</LinearLayout> 

基本上我需要知道的是如何讓Availability.class文件使用第二個xml文件?我能看到的所有標籤都很棒! 我不想在主代碼中創建按鈕等,因爲我試圖儘可能保持OO。我看過的所有示例都使用tabs.xml來佈置活動,如果您希望每個選項卡具有相同的信息,或者佈局的內容直接寫入到java類中,那麼這個示例非常棒。

是否有可能做我想要的東西?如果有的話,有人可以告訴我如何做到這一點或將我連接到某個地方?

回答

2

你想要的基本上是如何組織我的應用程序(與第二個版本我擺弄的是,而不是基於視圖)。

雖然您的Tabs XML文件似乎有點問題。

1)爲什麼你有xmlns:android標籤兩次? TabHost和LinearLayout都有它 - 從LinearLayout中移除一個。 2)不確定關於LinearLayout上的match_parent佈局參數(儘管這可能不是問題) - 我的第一個TabHost(稍後修改了一下)看起來像這樣,這與你的非常相似(我想我們遵循同樣的教程關閉了Android文檔;)),並且工作得很好:

<TabHost 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"/> 
     <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent"/> 
    </LinearLayout> 
</TabHost> 

嘗試解決的第一件事,它應該工作得很好,我認爲沒有理由不應該。

+0

謝謝你指出那個錯誤,我試過了,但還是沒有成功。 tab.xml看起來很好,因爲我能夠查看選項卡,它的活動內容中沒有顯示的內容。我正在使用另一個xml文件來保存這些信息。 對不起,我在我的解釋中沒有很強的技術性:( – alsobubbly 2011-03-17 23:43:00

+0

真的嗎?該死,我不確定那麼我的代碼老實說是完全一樣的方式嘿,你把第二個活動添加到清單中了嗎 – Klaus 2011-03-18 05:56:05

+0

是的我我補充說,我不需要對它做任何事情嗎?我有<活動android:name =「Availability」/> – alsobubbly 2011-03-18 15:09:46

1

我解決了我的問題,基本上我不知道發生了什麼事情,但配置中的某些東西肯定已經損壞。 我創建了一個新項目,並複製並粘貼了我的代碼,現在它的所有工作都正常。確實很奇怪。 謝謝克勞斯的幫助,它確實有幫助,因爲你指出的事情是我犯的錯誤。

另外還有