2012-12-14 23 views
0

可能重複:
start Activity from an other Activity with Tabs如何讓TabHost在每個Activity中顯示?

enter image description hereenter image description here

看到下面的兩張圖片,我想點擊圖標 「所有歌曲」,然後跳轉到播放列表。但我不知道如何使用TabHost並顯示在播放列表上?如何讓TabHost在每個活動中顯示?

活動的代碼有TabHost:

/*package com.lxy.musicplayer.view; 

import com.lxy.musicplayer.R; 

import android.app.TabActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.Window; 
import android.widget.TabHost; 

public class BuddleTabHostActivity extends TabActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     TabHost tab = getTabHost(); 
//  LayoutInflater.from(this).inflate(R.layout.tabhost_layout, tab.getTabContentView(),true); 

     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.tabhost_layout); 


     addIntentActivity(tab, MainActivity.class, "all songs"); 
     addIntentActivity(tab, MainActivity.class, "Network songs "); 
     addIntentActivity(tab, MainActivity.class, "my set"); 

     tab.setCurrentTab(0); 


    } 


    private void addIntentActivity(TabHost tab,Class c,String title){ 
     Intent intent = new Intent(); 
     intent.setClass(this, c); 

     TabHost.TabSpec spec = tab.newTabSpec(title); 
     spec.setIndicator(title); 
     spec.setContent(intent); 
     tab.addTab(spec); 

    } 


} 
*/ 

package com.lxy.musicplayer.view; 

import com.lxy.musicplayer.R; 

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

public class BuddleTabHostActivity extends TabActivity{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.tabhost_layout); 
     //get switching object 
     TabHost tab=getTabHost(); 
     addIntentActivity(tab, MainActivity.class,"local"); 
     addIntentActivity(tab, PlayActivity.class,"favorite"); 
     addIntentActivity(tab, PlayListActivity.class,"online"); 
     addIntentActivity(tab, MainActivity.class,"setting"); 
     //executive tab default 
     tab.setCurrentTab(0); 
    } 

    public void addIntentActivity(TabHost tab,Class<?> c,String str){ 
     Intent intent=new Intent(); 
     intent.setClass(this, c); 
     //switching object and obtain tab 
     TabHost.TabSpec spec=tab.newTabSpec(str); 
     //set tab information 
     //turn to the page display 
     spec.setIndicator(str); 
     spec.setContent(intent); 
     //add tabs 
     tab.addTab(spec); 
    } 

} 

回答

1

請寫下面的代碼,它會解決你的問題。

ActivityStack.java

private Stack<String> stack; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (stack == null) 
     stack = new Stack<String>(); 
    // start default activity 
    push("FirstStackActivity", new Intent(this, Tab_SampleActivity.class)); 
} 

@Override 
public void finishFromChild(Activity child) { 
    pop(); 
} 

@Override 
public void onBackPressed() { 
    pop(); 
} 

public void push(String id, Intent intent) { 
    Window window = getLocalActivityManager().startActivity(id, intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
    if (window != null) { 
     stack.push(id); 
     setContentView(window.getDecorView()); 
    } 
} 

public void pop() { 
    if (stack.size() == 1) 
     finish(); 
    LocalActivityManager manager = getLocalActivityManager(); 
    manager.destroyActivity(stack.pop(), true); 
    if (stack.size() > 0) { 
     Intent lastIntent = manager.getActivity(stack.peek()).getIntent(); 
     Window newWindow = manager.startActivity(stack.peek(), lastIntent); 
     setContentView(newWindow.getDecorView()); 
    } 
} 

TabActivity.java

public class TabActivity extends TabActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tab_screen); 
     TabHost tabHost = getTabHost(); 
     Intent intent = new Intent().setClass(this, ActivityStack.class); 
     TabHost.TabSpec spec = tabHost.newTabSpec("tabId").setIndicator("Temp", getResources().getDrawable(R.drawable.home)); 
     spec.setContent(intent); 

     tabHost.addTab(spec); 

     Intent intent1 = new Intent().setClass(this, ActivityStack.class); 
     TabHost.TabSpec spec1 = tabHost.newTabSpec("tabId").setIndicator("Temp", getResources().getDrawable(R.drawable.invoice)); 
     spec1.setContent(intent1); 
     tabHost.addTab(spec1); 

     tabHost.setCurrentTab(0); 
    } 
} 

FirstActivity.java

public class FirstActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     TextView textView = new TextView(this); 
     textView.setText("Tab Sample Activity "); 
     textView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(); 
       intent.setClass(getParent(), SecondActivity.class); 
       ActivityStack activityStack = (ActivityStack) getParent(); 
       activityStack.push("SecondActivity", intent); 
      } 
     }); 
     setContentView(textView); 
    } 
} 

SecondActivity.java

public class SecondActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     TextView textView = new TextView(this); 
     textView.setText("First Stack Activity "); 
     textView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(); 
       intent.setClass(getParent(), ThirdActivity.class); 
       ActivityStack activityStack = (ActivityStack) getParent(); 
       activityStack.push("ThirdActivity", intent); 
      } 
     }); 
     setContentView(textView); 
    } 
} 

ThirdActivity.java

public class ThirdActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

添加以下XML文件到您的RES /佈局文件夾。

1)tab_screen.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" > 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" 
     android:padding="3dp" > 

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_above="@android:id/tabs" 
      android:layout_weight="1" /> 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" /> 
    </RelativeLayout> 

</TabHost> 

2)main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" /> 

</LinearLayout> 

的AndroidManifest.xml: -

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.android.tabsample" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="8" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".FirstActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".TabActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".ActivityStack" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".SecondActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".ThirdActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

而見下面的鏈接與完整的示例的更多信息。

Multiple Android Activities in a TabActivity

2

有兩個選項可供 1.Activity集團 2.Fragment 我想更喜歡你碎片,因爲活動管理器由片段替換新版本。如果你想使用片段請按照這個link

1

你需要創建一個TabActivityGroup來實現它。

從繼承TabActivity的類,調用下面給出的活動。

public class TabActivity extends TabActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tab_screen); 
     TabHost tabHost = getTabHost(); 
     Intent intent = new Intent().setClass(this, InterMediateActivity.class); 
     TabHost.TabSpec spec = tabHost.newTabSpec("tabId").setIndicator("Temp", getResources().getDrawable(R.drawable.home)); 
     spec.setContent(intent); 

     tabHost.addTab(spec); 


     tabHost.setCurrentTab(0); 
    } 
} 


import android.content.Intent; 
import android.os.Bundle; 

public class InterMediateActivity extends TabActivityGroup{ 
    String TabID; 
    String TabName; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     filterTabs(TabID); 
    } 
    private void filterTabs(String TabID) 
    { 

      Intent intent = new Intent(this, MainActivity.class);      
      startChildActivity("ContentListing", intent);    



      //TabsUtil.setTabIndicator(specTab,"Wall", null, tabView); 

      // TabID 
    } 



} 

通過此活動,您可以調用filtertabs函數中顯示的其他活動。

相關問題