ANDROID - Adding ActionBar Navigation Tabs

15:05:00 Dhaval Sodha Parmar 5 Comments




Note: if you are develop App < 3.0 Android OS then use ActionBarSherlock  support library.


ActionBarSherlock is an extension of the support library designed to facilitate the use of the action bar design pattern across all versions of Android with a single API.


Create new Android Project : in Main Activity



 package com.AlarmManager;  
 import android.os.Bundle;  
 import android.view.View;  
 import com.actionbarsherlock.app.ActionBar;  
 import com.actionbarsherlock.app.ActionBar.Tab;  
 import com.actionbarsherlock.app.SherlockFragmentActivity;  
 public class AlarmManagerActivity extends SherlockFragmentActivity {  
      public static String ACTIVE_TAB = "activeTab";  
      /** Called when the activity is first created. */  
      @Override  
      public void onCreate(Bundle savedInstanceState) {  
           setTheme(R.style.Theme_Sherlock_Light_DarkActionBar);  
           super.onCreate(savedInstanceState);  
           // setContentView(R.layout.main);  
           final ActionBar actionBar = getSupportActionBar();  
           actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  
           // add tabs  
           Tab tab1 = actionBar  
                     .newTab()  
                     .setText("Tab1")  
                     .setTabListener(  
                               new TabListener<TabFragment>(this, "tab1",  
                                         TabFragment.class));  
           actionBar.addTab(tab1);  
           Tab tab2 = actionBar  
                     .newTab()  
                     .setText("Tab2")  
                     .setTabListener(  
                               new TabListener<TabFragment1>(this, "tab2",  
                                         TabFragment1.class));  
           actionBar.addTab(tab2);  
           // check if there is a saved state to select active tab  
           if (savedInstanceState != null) {  
                getSupportActionBar().setSelectedNavigationItem(  
                          savedInstanceState.getInt(ACTIVE_TAB));  
           }  
      }  
      @Override  
      protected void onSaveInstanceState(Bundle outState) {  
           // save active tab  
           outState.putInt(ACTIVE_TAB, getSupportActionBar()  
                     .getSelectedNavigationIndex());  
           super.onSaveInstanceState(outState);  
      }  
 }  

Create TabListener Class:

 package com.AlarmManager;  
 import android.app.Activity;  
 import android.support.v4.app.Fragment;  
 import android.support.v4.app.FragmentTransaction;  
 import com.actionbarsherlock.app.ActionBar;  
 import com.actionbarsherlock.app.ActionBar.Tab;  
 public class TabListener<T extends Fragment> implements ActionBar.TabListener {  
   private Fragment mFragment;  
   private final Activity mActivity;  
   private final String mTag;  
   private final Class<T> mClass;  
   /** Constructor used each time a new tab is created.  
    * @param activity The host Activity, used to instantiate the fragment  
    * @param tag The identifier tag for the fragment  
    * @param clz The fragment's Class, used to instantiate the fragment  
    */  
   public TabListener(Activity activity, String tag, Class<T> clz) {  
     mActivity = activity;  
     mTag = tag;  
     mClass = clz;  
   }  
   /* The following are each of the ActionBar.TabListener callbacks */  
   public void onTabSelected(Tab tab, FragmentTransaction ft) {  
     // Check if the fragment is already initialized  
     if (mFragment == null) {  
       // If not, instantiate and add it to the activity  
       mFragment = Fragment.instantiate(mActivity, mClass.getName());  
       ft.add(android.R.id.content, mFragment, mTag);  
     } else {  
       // If it exists, simply attach it in order to show it  
       ft.attach(mFragment);  
     }  
   }  
   public void onTabUnselected(Tab tab, FragmentTransaction ft) {  
     if (mFragment != null) {  
       // Detach the fragment, because another one is being attached  
       ft.detach(mFragment);  
     }  
   }  
   public void onTabReselected(Tab tab, FragmentTransaction ft) {  
     // User selected the already selected tab. Usually do nothing.  
   }  
 }  

Create TabFragment class:

 package com.AlarmManager;  
 import android.os.Bundle;  
 import android.view.LayoutInflater;  
 import android.view.View;  
 import android.view.ViewGroup;  
 import com.actionbarsherlock.app.SherlockFragment;  
 public class TabFragment extends SherlockFragment {  
      @Override  
      public View onCreateView(LayoutInflater inflater, ViewGroup container,  
                Bundle savedInstanceState) {  
           // Inflate the layout for this fragment  
           View view = inflater  
                     .inflate(R.layout.main, container, false);  
           // do your view initialization here  
           return view;  
      }  
 }  

main.xml layout file:

 <?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:gravity="center"  
   android:orientation="vertical" >  
   <TextView  
     android:id="@+id/textView1"  
     android:layout_width="match_parent"  
     android:layout_height="wrap_content"  
     android:gravity="center"  
     android:text="Tab1"  
     android:textAppearance="?android:attr/textAppearanceLarge" />  
   <Button  
     android:id="@+id/button1"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:text="Button" >  
   </Button>  
 </LinearLayout>  

Same as TabFragment class i have used TabFragment1 class with two button.

Enjoy Coding..

5 comments:

  1. Hello sir

    can u tel me how to add libraries

    ReplyDelete
  2. I already have the support libraries installed and i have the "libs" folder in the project

    But stil i'm getting errors...

    ReplyDelete
  3. Please tell me what error you get..

    Please do this:

    Select Java Build Path, and click the Libraries tab.
    Click Add External JARs, browse to /extras/android/support/v4/android-support-v4.jar. Click OK
    On the Order and Export tab, select android-support-v4.jar.
    Click OK.

    if you already done this then check if your sharelock library have android-support-v4.jar then delete it from your project not from sharelock library.

    ReplyDelete
  4. How to use the buttons inside the tab to do some actions ?

    ReplyDelete