• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2006 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.app;
18 
19 import android.os.Bundle;
20 import android.view.View;
21 import android.widget.TabHost;
22 import android.widget.TabWidget;
23 import android.widget.TextView;
24 
25 /**
26  * <p>For apps developing against {@link android.os.Build.VERSION_CODES#HONEYCOMB}
27  * or later, tabs are typically presented in the UI using the new
28  * {@link ActionBar#newTab() ActionBar.newTab()} and
29  * related APIs for placing tabs within their action bar area.</p>
30  *
31  * <p>A replacement for TabActivity can also be implemented by directly using
32  * TabHost.  You will need to define a layout that correctly uses a TabHost
33  * with a TabWidget as well as an area in which to display your tab content.
34  * A typical example would be:</p>
35  *
36  * {@sample development/samples/Support4Demos/res/layout/fragment_tabs.xml complete}
37  *
38  * <p>The implementation needs to take over responsibility for switching
39  * the shown content when the user switches between tabs.
40  *
41  * {@sample development/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabs.java
42  *      complete}
43  *
44  * <p>Also see the <a href="{@docRoot}resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabsPager.html">
45  * Fragment Tabs Pager</a> sample for an example of using the support library's ViewPager to
46  * allow the user to swipe the content to switch between tabs.</p>
47  *
48  * @deprecated New applications should use Fragments instead of this class;
49  * to continue to run on older devices, you can use the v4 support library
50  * which provides a version of the Fragment API that is compatible down to
51  * {@link android.os.Build.VERSION_CODES#DONUT}.
52  */
53 @Deprecated
54 public class TabActivity extends ActivityGroup {
55     private TabHost mTabHost;
56     private String mDefaultTab = null;
57     private int mDefaultTabIndex = -1;
58 
TabActivity()59     public TabActivity() {
60     }
61 
62     /**
63      * Sets the default tab that is the first tab highlighted.
64      *
65      * @param tag the name of the default tab
66      */
setDefaultTab(String tag)67     public void setDefaultTab(String tag) {
68         mDefaultTab = tag;
69         mDefaultTabIndex = -1;
70     }
71 
72     /**
73      * Sets the default tab that is the first tab highlighted.
74      *
75      * @param index the index of the default tab
76      */
setDefaultTab(int index)77     public void setDefaultTab(int index) {
78         mDefaultTab = null;
79         mDefaultTabIndex = index;
80     }
81 
82     @Override
onRestoreInstanceState(Bundle state)83     protected void onRestoreInstanceState(Bundle state) {
84         super.onRestoreInstanceState(state);
85         ensureTabHost();
86         String cur = state.getString("currentTab");
87         if (cur != null) {
88             mTabHost.setCurrentTabByTag(cur);
89         }
90         if (mTabHost.getCurrentTab() < 0) {
91             if (mDefaultTab != null) {
92                 mTabHost.setCurrentTabByTag(mDefaultTab);
93             } else if (mDefaultTabIndex >= 0) {
94                 mTabHost.setCurrentTab(mDefaultTabIndex);
95             }
96         }
97     }
98 
99     @Override
onPostCreate(Bundle icicle)100     protected void onPostCreate(Bundle icicle) {
101         super.onPostCreate(icicle);
102 
103         ensureTabHost();
104 
105         if (mTabHost.getCurrentTab() == -1) {
106             mTabHost.setCurrentTab(0);
107         }
108     }
109 
110     @Override
onSaveInstanceState(Bundle outState)111     protected void onSaveInstanceState(Bundle outState) {
112         super.onSaveInstanceState(outState);
113         String currentTabTag = mTabHost.getCurrentTabTag();
114         if (currentTabTag != null) {
115             outState.putString("currentTab", currentTabTag);
116         }
117     }
118 
119     /**
120      * Updates the screen state (current list and other views) when the
121      * content changes.
122      *
123      *@see Activity#onContentChanged()
124      */
125     @Override
onContentChanged()126     public void onContentChanged() {
127         super.onContentChanged();
128         mTabHost = (TabHost) findViewById(com.android.internal.R.id.tabhost);
129 
130         if (mTabHost == null) {
131             throw new RuntimeException(
132                     "Your content must have a TabHost whose id attribute is " +
133                     "'android.R.id.tabhost'");
134         }
135         mTabHost.setup(getLocalActivityManager());
136     }
137 
ensureTabHost()138     private void ensureTabHost() {
139         if (mTabHost == null) {
140             this.setContentView(com.android.internal.R.layout.tab_content);
141         }
142     }
143 
144     @Override
145     protected void
onChildTitleChanged(Activity childActivity, CharSequence title)146     onChildTitleChanged(Activity childActivity, CharSequence title) {
147         // Dorky implementation until we can have multiple activities running.
148         if (getLocalActivityManager().getCurrentActivity() == childActivity) {
149             View tabView = mTabHost.getCurrentTabView();
150             if (tabView != null && tabView instanceof TextView) {
151                 ((TextView) tabView).setText(title);
152             }
153         }
154     }
155 
156     /**
157      * Returns the {@link TabHost} the activity is using to host its tabs.
158      *
159      * @return the {@link TabHost} the activity is using to host its tabs.
160      */
getTabHost()161     public TabHost getTabHost() {
162         ensureTabHost();
163         return mTabHost;
164     }
165 
166     /**
167      * Returns the {@link TabWidget} the activity is using to draw the actual tabs.
168      *
169      * @return the {@link TabWidget} the activity is using to draw the actual tabs.
170      */
getTabWidget()171     public TabWidget getTabWidget() {
172         return mTabHost.getTabWidget();
173     }
174 }
175