diff options
| author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
|---|---|---|
| committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
| commit | 9066cfe9886ac131c34d59ed0e2d287b0e3c0087 (patch) | |
| tree | d88beb88001f2482911e3d28e43833b50e4b4e97 /core/java/android/app/TabActivity.java | |
| parent | d83a98f4ce9cfa908f5c54bbd70f03eec07e7553 (diff) | |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'core/java/android/app/TabActivity.java')
| -rw-r--r-- | core/java/android/app/TabActivity.java | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/core/java/android/app/TabActivity.java b/core/java/android/app/TabActivity.java new file mode 100644 index 000000000000..033fa0c8bf87 --- /dev/null +++ b/core/java/android/app/TabActivity.java @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app; + +import android.os.Bundle; +import android.view.View; +import android.widget.TabHost; +import android.widget.TabWidget; +import android.widget.TextView; + +/** + * An activity that contains and runs multiple embedded activities or views. + */ +public class TabActivity extends ActivityGroup { + private TabHost mTabHost; + private String mDefaultTab = null; + private int mDefaultTabIndex = -1; + + public TabActivity() { + } + + /** + * Sets the default tab that is the first tab highlighted. + * + * @param tag the name of the default tab + */ + public void setDefaultTab(String tag) { + mDefaultTab = tag; + mDefaultTabIndex = -1; + } + + /** + * Sets the default tab that is the first tab highlighted. + * + * @param index the index of the default tab + */ + public void setDefaultTab(int index) { + mDefaultTab = null; + mDefaultTabIndex = index; + } + + @Override + protected void onRestoreInstanceState(Bundle state) { + super.onRestoreInstanceState(state); + ensureTabHost(); + String cur = state.getString("currentTab"); + if (cur != null) { + mTabHost.setCurrentTabByTag(cur); + } + if (mTabHost.getCurrentTab() < 0) { + if (mDefaultTab != null) { + mTabHost.setCurrentTabByTag(mDefaultTab); + } else if (mDefaultTabIndex >= 0) { + mTabHost.setCurrentTab(mDefaultTabIndex); + } + } + } + + @Override + protected void onPostCreate(Bundle icicle) { + super.onPostCreate(icicle); + + ensureTabHost(); + + if (mTabHost.getCurrentTab() == -1) { + mTabHost.setCurrentTab(0); + } + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + String currentTabTag = mTabHost.getCurrentTabTag(); + if (currentTabTag != null) { + outState.putString("currentTab", currentTabTag); + } + } + + /** + * Updates the screen state (current list and other views) when the + * content changes. + * + *@see Activity#onContentChanged() + */ + @Override + public void onContentChanged() { + super.onContentChanged(); + mTabHost = (TabHost) findViewById(com.android.internal.R.id.tabhost); + + if (mTabHost == null) { + throw new RuntimeException( + "Your content must have a TabHost whose id attribute is " + + "'android.R.id.tabhost'"); + } + mTabHost.setup(getLocalActivityManager()); + } + + private void ensureTabHost() { + if (mTabHost == null) { + this.setContentView(com.android.internal.R.layout.tab_content); + } + } + + @Override + protected void + onChildTitleChanged(Activity childActivity, CharSequence title) { + // Dorky implementation until we can have multiple activities running. + if (getLocalActivityManager().getCurrentActivity() == childActivity) { + View tabView = mTabHost.getCurrentTabView(); + if (tabView != null && tabView instanceof TextView) { + ((TextView) tabView).setText(title); + } + } + } + + /** + * Returns the {@link TabHost} the activity is using to host its tabs. + * + * @return the {@link TabHost} the activity is using to host its tabs. + */ + public TabHost getTabHost() { + ensureTabHost(); + return mTabHost; + } + + /** + * Returns the {@link TabWidget} the activity is using to draw the actual tabs. + * + * @return the {@link TabWidget} the activity is using to draw the actual tabs. + */ + public TabWidget getTabWidget() { + return mTabHost.getTabWidget(); + } +} |
