blob: 637c8c19aef5eeb6ff5fb2586e6882709fe94777 [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
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
17package android.app;
18
19import android.os.Bundle;
20import android.view.View;
21import android.widget.TabHost;
22import android.widget.TabWidget;
23import android.widget.TextView;
24
25/**
Dianne Hackborn2f048832011-06-16 13:31:57 -070026 * <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 *
Dianne Hackborn271c2fe2011-08-09 19:35:13 -070031 * @deprecated New applications should use Fragments instead of this class;
32 * to continue to run on older devices, you can use the v4 support library
33 * which provides a version of the Fragment API that is compatible down to
34 * {@link android.os.Build.VERSION_CODES#DONUT}.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080035 */
Dianne Hackborn2f048832011-06-16 13:31:57 -070036@Deprecated
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080037public class TabActivity extends ActivityGroup {
38 private TabHost mTabHost;
39 private String mDefaultTab = null;
40 private int mDefaultTabIndex = -1;
41
42 public TabActivity() {
43 }
44
45 /**
46 * Sets the default tab that is the first tab highlighted.
47 *
48 * @param tag the name of the default tab
49 */
50 public void setDefaultTab(String tag) {
51 mDefaultTab = tag;
52 mDefaultTabIndex = -1;
53 }
54
55 /**
56 * Sets the default tab that is the first tab highlighted.
57 *
58 * @param index the index of the default tab
59 */
60 public void setDefaultTab(int index) {
61 mDefaultTab = null;
62 mDefaultTabIndex = index;
63 }
64
65 @Override
66 protected void onRestoreInstanceState(Bundle state) {
67 super.onRestoreInstanceState(state);
68 ensureTabHost();
69 String cur = state.getString("currentTab");
70 if (cur != null) {
71 mTabHost.setCurrentTabByTag(cur);
72 }
73 if (mTabHost.getCurrentTab() < 0) {
74 if (mDefaultTab != null) {
75 mTabHost.setCurrentTabByTag(mDefaultTab);
76 } else if (mDefaultTabIndex >= 0) {
77 mTabHost.setCurrentTab(mDefaultTabIndex);
78 }
79 }
80 }
81
82 @Override
83 protected void onPostCreate(Bundle icicle) {
84 super.onPostCreate(icicle);
85
86 ensureTabHost();
87
88 if (mTabHost.getCurrentTab() == -1) {
89 mTabHost.setCurrentTab(0);
90 }
91 }
92
93 @Override
94 protected void onSaveInstanceState(Bundle outState) {
95 super.onSaveInstanceState(outState);
96 String currentTabTag = mTabHost.getCurrentTabTag();
97 if (currentTabTag != null) {
98 outState.putString("currentTab", currentTabTag);
99 }
100 }
101
102 /**
103 * Updates the screen state (current list and other views) when the
104 * content changes.
105 *
106 *@see Activity#onContentChanged()
107 */
108 @Override
109 public void onContentChanged() {
110 super.onContentChanged();
111 mTabHost = (TabHost) findViewById(com.android.internal.R.id.tabhost);
112
113 if (mTabHost == null) {
114 throw new RuntimeException(
115 "Your content must have a TabHost whose id attribute is " +
116 "'android.R.id.tabhost'");
117 }
118 mTabHost.setup(getLocalActivityManager());
119 }
120
121 private void ensureTabHost() {
122 if (mTabHost == null) {
123 this.setContentView(com.android.internal.R.layout.tab_content);
124 }
125 }
126
127 @Override
128 protected void
129 onChildTitleChanged(Activity childActivity, CharSequence title) {
130 // Dorky implementation until we can have multiple activities running.
131 if (getLocalActivityManager().getCurrentActivity() == childActivity) {
132 View tabView = mTabHost.getCurrentTabView();
133 if (tabView != null && tabView instanceof TextView) {
134 ((TextView) tabView).setText(title);
135 }
136 }
137 }
138
139 /**
140 * Returns the {@link TabHost} the activity is using to host its tabs.
141 *
142 * @return the {@link TabHost} the activity is using to host its tabs.
143 */
144 public TabHost getTabHost() {
145 ensureTabHost();
146 return mTabHost;
147 }
148
149 /**
150 * Returns the {@link TabWidget} the activity is using to draw the actual tabs.
151 *
152 * @return the {@link TabWidget} the activity is using to draw the actual tabs.
153 */
154 public TabWidget getTabWidget() {
155 return mTabHost.getTabWidget();
156 }
157}