2012-11-29 74 views
0

我有一個帶有3個標籤的應用程序。每個選項卡都有一個活動,並且有一個活動管理選項卡。這工作正常,我可以切換標籤。但是現在我想通過按下其他選項卡上的按鈕來切換到選項卡。我試圖啓動活動是這樣的:從其他帶有標籤的活動開始的活動

final Intent openTabMainActivity = new Intent(this,TabMainActivity.class); startActivity(openTabMainActivity);

這盈選項卡的啓動活動。但我只想切換到活動。

這是管理選項卡(我在Android的新的,我接到了一個教程這個代碼)的活動:

public class MainActivity extends TabActivity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    TabHost tabHost = getTabHost(); 

    // Tab for Main 
    TabSpec mainspec = tabHost.newTabSpec("Main"); 
    // setting Title and Icon for the Tab 
    mainspec.setIndicator("Main", getResources().getDrawable(R.drawable.icon_main_tab)); 
    Intent mainIntent = new Intent(this, TabMainActivity.class); 
    mainspec.setContent(mainIntent); 

    // Tab for Graph 
    TabSpec graphspec = tabHost.newTabSpec("Graph"); 
    graphspec.setIndicator("Graph", getResources().getDrawable(R.drawable.icon_graph_tab)); 
    Intent graphIntent = new Intent(this, TabGraphActivity.class); 
    graphspec.setContent(graphIntent); 

    // Tab for Option 
    TabSpec optionspec = tabHost.newTabSpec("Option"); 
    optionspec.setIndicator("Option", getResources().getDrawable(R.drawable.icon_option_tab)); 
    Intent optionIntent = new Intent(this, TabOptionActivity.class); 
    optionspec.setContent(optionIntent); 


    // Adding all TabSpec to TabHost 
    tabHost.addTab(mainspec); 
    tabHost.addTab(graphspec); 
    tabHost.addTab(optionspec); 
} 

}

+0

TabActivity已棄用。不要使用已棄用的類。新課程給你更多的自由和特點。 – waqaslam

+0

我應該使用什麼? –

+0

[This](http://stackoverflow.com/questions/6987334/separate-back-stack-for-each-tab-in-android-using-fragments)線程可能會很有趣..最好使用帶有Tabs的Fragments使用TabActivity。 – Krishnabhadra

回答

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