Action bar's provide a functionality to integrate tabs.
As mentioned in my previous post I'm just recapping how to configure Sherlock API with our project.
Steps to implement Sherlock action bar include.
Here I would like to use a ViewPager, Fragments along with Tab's. Add tabs to ActionBar, intialiase FragmentPagerAdapter, set FragmentPagerAdapter to ViewPager, integrate tab clicks with viewpager.
The complete activity looks like
- Download Sherlock source.
- UnZip the source and find "actionbarsherlock" folder, which is the library project for implementing Sherlock ActionBar.
- Import the library project into the workspace.
- Create a new Android Project.
- Click on properties of the project and add "actionbarsherlock" as library project.
- Extend your class with SherlockActivity
public class SherlockAtionBar extends SherlockActivity
- Override onCreate and setTheme as one of the sherlock theme before calling super.onCreate()
Here I would like to use a ViewPager, Fragments along with Tab's. Add tabs to ActionBar, intialiase FragmentPagerAdapter, set FragmentPagerAdapter to ViewPager, integrate tab clicks with viewpager.
The complete activity looks like
import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.Tab; import com.actionbarsherlock.app.ActionBar.TabListener; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.vl.actionbar.LoginFragment; import com.vl.actionbar.R; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.ViewPager; import android.view.View; import android.view.ViewParent; import java.util.ArrayList; /** * Sherlock Action Bar to demonstrate Tabs behavior * * @author shpolavarapu * */ public class SherlockTabsActionBarActivity extends SherlockFragmentActivity { private ViewPager mViewPager; private ActionBar mSupportActionBar; @Override protected void onCreate(Bundle savedInstanceState) { setTheme(R.style.Theme_Sherlock_Light_DarkActionBar); super.onCreate(savedInstanceState); init(); } /** * Initialises the Views and variables for this activity. */ private void init() { // Initialise and set viewpager to the activity. mViewPager = new ViewPager(this); mViewPager.setId(1232); setContentView(mViewPager); // Init and set ActionBar Properties. mSupportActionBar = getSupportActionBar(); mSupportActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // Initialise Adapter for the view pager. SherlockTabAdapter adapter = new SherlockTabAdapter(); ArrayList<Bundle> bundleAL = new ArrayList<Bundle>(); String texts[] = {"Login", "Elections", "Polling", "Results"}; for(int index = 0; index < texts.length; index++) { // Prepare Bundle object for each tab. Bundle bundle = new Bundle(); bundle.putString("text", texts[index]); bundleAL.add(bundle); // Add tabs for the action bar. ActionBar.Tab tab = mSupportActionBar.newTab().setText(texts[index]) .setTabListener(adapter); mSupportActionBar.addTab(tab); } adapter.setBundle(bundleAL); mViewPager.setAdapter(adapter); mViewPager.setOnPageChangeListener(adapter); } /** * Adapter for setting the content for the tab click's. * * @author shpolavarapu * */ private class SherlockTabAdapter extends FragmentPagerAdapter implements ActionBar.TabListener, ViewPager.OnPageChangeListener { private ArrayList<Bundle> mBundleAL; public SherlockTabAdapter() { super(getSupportFragmentManager()); } /** * ArrayList of bundle's to pass as Arguments to Fragment. * @param bundleAL ArrayList of bundle's */ void setBundle(ArrayList<Bundle> bundleAL) { mBundleAL = bundleAL; } @Override public void onPageScrollStateChanged(int position) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int position) { // Change the tab selection upon page selection. mSupportActionBar.setSelectedNavigationItem(position); } @Override public void onTabReselected(Tab arg0, FragmentTransaction arg1) { } @Override public void onTabSelected(Tab tab, FragmentTransaction arg1) { // On Tab selection change the View Pager's Current item position. mViewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(Tab arg0, FragmentTransaction arg1) { } @Override public Fragment getItem(int pos) { return Fragment.instantiate(SherlockTabsActionBarActivity.this, LoginFragment.class.getName(), mBundleAL.get(pos)); } @Override public int getCount() { return mBundleAL.size(); } } }
The LoginFragment is posted below.
login Layout is posted below :
Output :
Overview:
Create Tabs and ArrayList of Bundle data which contain name of the tab. Create a ViewPager and set the FragmentPagerAdaper to it. The Adapter also listens TabClick and ViewPager PageChange. On TabClick, Login Fragment with the bundle data as arguments is instantiated and supplied to viewpager.
import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class LoginFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.login, null); if(getArguments() != null) { String text = getArguments().getString("text"); ((TextView)view.findViewById(R.id.tv_login)).setText(text); } return view; } }
login Layout is posted below :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:orientation="vertical" > <TextView android:id="@+id/tv_login" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Login" /> </LinearLayout>
Output :
Overview:
Create Tabs and ArrayList of Bundle data which contain name of the tab. Create a ViewPager and set the FragmentPagerAdaper to it. The Adapter also listens TabClick and ViewPager PageChange. On TabClick, Login Fragment with the bundle data as arguments is instantiated and supplied to viewpager.
Don't forget to add NavigationMode as ActionBar.NAVIGATION_MODE_TABS. Native Action Bar's implementation with tabs can also use the same code with minor changes,
Related topics :
No comments:
Post a Comment