Wednesday, March 13, 2013

Android using ActionBarSherlock for tabview


create a project with the name ABSTabsViewPagerActivity and have following inside the project:

1)ABSTabsViewPagerActivity.java

package com.jitesh.abstabsviewpageractiveity;

import java.util.ArrayList;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.widget.TextView;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.app.ActionBar.Tab;

public class ABSTabsViewPagerActivity extends SherlockFragmentActivity
{

ViewPager mViewPager;
TabsAdapter mTabsAdapter;
TextView tabCenter;
TextView tabText;

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

mViewPager = new ViewPager(this);
mViewPager.setId(R.id.pager);

setContentView(mViewPager);
ActionBar bar = getSupportActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

mTabsAdapter = new TabsAdapter(this, mViewPager);

mTabsAdapter.addTab(
bar.newTab().setText("Fragment 1"),
FragmentOne.class, null);
mTabsAdapter.addTab(
bar.newTab()
.setText("Fragment 2"),
FragmentTwo.class, null);

}

public static class TabsAdapter extends FragmentPagerAdapter implements
ActionBar.TabListener, ViewPager.OnPageChangeListener
{
private final Context mContext;
private final ActionBar mActionBar;
private final ViewPager mViewPager;
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();

static final class TabInfo
{
private final Class<?> clss;
private final Bundle args;

TabInfo(Class<?> _class, Bundle _args)
{
clss = _class;
args = _args;
}
}

public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager)
{
super(activity.getSupportFragmentManager());
mContext = activity;
mActionBar = activity.getSupportActionBar();
mViewPager = pager;
mViewPager.setAdapter(this);
mViewPager.setOnPageChangeListener(this);
}

public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args)
{
TabInfo info = new TabInfo(clss, args);
tab.setTag(info);
tab.setTabListener(this);
mTabs.add(info);
mActionBar.addTab(tab);
notifyDataSetChanged();
}

@Override
public int getCount()
{
return mTabs.size();
}

@Override
public Fragment getItem(int position)
{
TabInfo info = mTabs.get(position);
return Fragment.instantiate(mContext, info.clss.getName(),
info.args);
}

public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels)
{
}

public void onPageSelected(int position)
{
mActionBar.setSelectedNavigationItem(position);
}

public void onPageScrollStateChanged(int state)
{
}

public void onTabSelected(Tab tab, FragmentTransaction ft)
{
Object tag = tab.getTag();
for (int i = 0; i < mTabs.size(); i++)
{
if (mTabs.get(i) == tag)
{
mViewPager.setCurrentItem(i);
}
}
}

public void onTabUnselected(Tab tab, FragmentTransaction ft)
{
}

public void onTabReselected(Tab tab, FragmentTransaction ft)
{
}
}
}

2)FragmentOne.java

package com.jitesh.abstabsviewpageractiveity;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.actionbarsherlock.app.SherlockFragment;

public class FragmentOne extends SherlockFragment
{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragmentone, container, false);
return view;
}
}




3)FragmentTwo .java


package com.jitesh.abstabsviewpageractiveity;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.actionbarsherlock.app.SherlockFragment;

public class FragmentTwo extends SherlockFragment
{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragmenttwo, container, false);

return view;
}

}


4)main.xml

<?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:orientation="vertical" >

    <android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</android.support.v4.view.ViewPager>

</LinearLayout>

5)fragmentone.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="Fragment One"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

6)fragmenttwo.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="Fragment Two"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

please download the library used in the project and also the code at ABSTabsViewPagerActivity

2 comments:

  1. HI! good night! THANKS A LOT FOR THIS TUTORIAL!! it was EXACTLY was i was looking for over thousands of forums and blogs.
    But i have a problem, i was modding the project, i want to put some large text on the fragments everything works fine but it only shows one part of the text (the display size) and it cant scroll down to read the continuation. PLEASE HELP!!!!!

    ReplyDelete
  2. I have finally did it!! if the solution helps, I the content insde and LinearLayout and it inside and ScrollView. CHEERS!

    ReplyDelete