12b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell/* 22b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * Copyright (C) 2010 The Android Open Source Project 32b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * 42b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * Licensed under the Apache License, Version 2.0 (the "License"); 52b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * you may not use this file except in compliance with the License. 62b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * You may obtain a copy of the License at 72b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * 82b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * http://www.apache.org/licenses/LICENSE-2.0 92b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * 102b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * Unless required by applicable law or agreed to in writing, software 112b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * distributed under the License is distributed on an "AS IS" BASIS, 122b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * See the License for the specific language governing permissions and 142b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * limitations under the License. 152b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell */ 162b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powellpackage com.example.android.apis.app; 172b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 182b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powellimport com.example.android.apis.R; 192b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 202b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powellimport android.app.ActionBar; 212b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powellimport android.app.ActionBar.Tab; 222b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powellimport android.app.Activity; 232b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powellimport android.app.Fragment; 242b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powellimport android.app.FragmentTransaction; 252b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powellimport android.os.Bundle; 262b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powellimport android.view.LayoutInflater; 272b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powellimport android.view.View; 282b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powellimport android.view.ViewGroup; 292b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powellimport android.widget.TextView; 302b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powellimport android.widget.Toast; 312b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 322b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell/** 332b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * This demonstrates the use of action bar tabs and how they interact 342b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * with other action bar features. 352b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell */ 362b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powellpublic class ActionBarTabs extends Activity { 372b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell @Override 382b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell protected void onCreate(Bundle savedInstanceState) { 392b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell super.onCreate(savedInstanceState); 402b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 412b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell setContentView(R.layout.action_bar_tabs); 422b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } 432b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 442b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell public void onAddTab(View v) { 452b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell final ActionBar bar = getActionBar(); 462b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell final int tabCount = bar.getTabCount(); 472b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell final String text = "Tab " + tabCount; 482b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell bar.addTab(bar.newTab() 492b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell .setText(text) 502b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell .setTabListener(new TabListener(new TabContentFragment(text)))); 512b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } 522b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 532b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell public void onRemoveTab(View v) { 542b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell final ActionBar bar = getActionBar(); 557ec212f1185e4dd43d765b22d65485d141037ae6Cheng Ke if (bar.getTabCount() > 0) { 567ec212f1185e4dd43d765b22d65485d141037ae6Cheng Ke bar.removeTabAt(bar.getTabCount() - 1); 577ec212f1185e4dd43d765b22d65485d141037ae6Cheng Ke } 582b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } 592b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 602b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell public void onToggleTabs(View v) { 612b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell final ActionBar bar = getActionBar(); 622b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 632b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell if (bar.getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS) { 642b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell bar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 652b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE, ActionBar.DISPLAY_SHOW_TITLE); 662b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } else { 672b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 682b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); 692b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } 702b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } 712b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 722b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell public void onRemoveAllTabs(View v) { 732b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell getActionBar().removeAllTabs(); 742b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } 752b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 762b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell /** 772b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * A TabListener receives event callbacks from the action bar as tabs 782b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * are deselected, selected, and reselected. A FragmentTransaction 792b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * is provided to each of these callbacks; if any operations are added 802b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * to it, it will be committed at the end of the full tab switch operation. 812b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * This lets tab switches be atomic without the app needing to track 822b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell * the interactions between different tabs. 83be6b6b494f094eea0abcd83eb8770bc4b9f7e34eDianne Hackborn * 84be6b6b494f094eea0abcd83eb8770bc4b9f7e34eDianne Hackborn * NOTE: This is a very simple implementation that does not retain 85be6b6b494f094eea0abcd83eb8770bc4b9f7e34eDianne Hackborn * fragment state of the non-visible tabs across activity instances. 86be6b6b494f094eea0abcd83eb8770bc4b9f7e34eDianne Hackborn * Look at the FragmentTabs example for how to do a more complete 87be6b6b494f094eea0abcd83eb8770bc4b9f7e34eDianne Hackborn * implementation. 882b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell */ 892b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell private class TabListener implements ActionBar.TabListener { 902b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell private TabContentFragment mFragment; 912b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 922b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell public TabListener(TabContentFragment fragment) { 932b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell mFragment = fragment; 942b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } 952b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 962b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell public void onTabSelected(Tab tab, FragmentTransaction ft) { 972b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell ft.add(R.id.fragment_content, mFragment, mFragment.getText()); 982b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } 992b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 1002b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell public void onTabUnselected(Tab tab, FragmentTransaction ft) { 1012b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell ft.remove(mFragment); 1022b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } 1032b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 1042b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell public void onTabReselected(Tab tab, FragmentTransaction ft) { 1052b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell Toast.makeText(ActionBarTabs.this, "Reselected!", Toast.LENGTH_SHORT).show(); 1062b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } 1072b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 1082b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } 1092b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 1102b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell private class TabContentFragment extends Fragment { 1112b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell private String mText; 1122b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 1132b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell public TabContentFragment(String text) { 1142b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell mText = text; 1152b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } 1162b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 1172b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell public String getText() { 1182b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell return mText; 1192b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } 1202b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 1212b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell @Override 1222b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell public View onCreateView(LayoutInflater inflater, ViewGroup container, 1232b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell Bundle savedInstanceState) { 1242b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell View fragView = inflater.inflate(R.layout.action_bar_tab_content, container, false); 1252b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 1262b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell TextView text = (TextView) fragView.findViewById(R.id.text); 1272b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell text.setText(mText); 1282b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 1292b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell return fragView; 1302b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } 1312b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell 1322b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell } 1332b658f0d9f59a73722ca7060a0cbb868c4b851acAdam Powell} 134