I think this should be tackled with a Non Swipeable ViewPager
. There is no way the view pager and the underlying Fragment
s should respond to the swiping gesture. The methods to override to disable swiping within the ViewPager
are:
onTouchEvent()
- returns false
.
onInterceptTouchEvent()
- returns false
.
Refer to this SO question for more information on how to achieve this.
Next up you want to be using Fragment
s within each of your pager holders. So we're building the following layout:

Within the parent activity a FragmentPagerAdapter
is instantiated and your tabs added with a tag:
Activity changes
@Override
protected void onCreate(final Bundle saveInstanceState) {
final FragmentPagerAdapter myTabAdapter = new MyFragmentPagerAdapter(
<Your ViewPager View>, <Your activity context, this>);
myTabAdapter.addTab(getActionBar().newTab(), "YOUR TAG", "Your Title");
// etc...
}
So this gives us the frame of the diagram above. A hosting activity, containing a ViewPager
and the underlying tabs. Next up is getting the Fragment
s (containing your tables) into each of the respective tabs. This is handled by the FragmentPagerAdapter
implementation:
Fragment adapter (inner class to activity):
private class MyFragmentPagerAdapter extends FragmentPagerAdapter implements
ActionBar.TabListener, ViewPager.OnPageChangeListener {
/**
* Constructs a pager adapter to back a {@link ViewPager}.
*
* @param pager
* The {@link ViewPager} widget.
* @param activityContext
* The context the widget is being added under.
*/
public SpotMenuFragmentPagerAdapter(final ViewPager pager,
final Context activityContext) {
super(getFragmentManager());
pager.setAdapter(this);
this.context = activityContext;
}
/**
* Adds a tab to the hosting activity action bar.
*
* @param newTab
* The tab to add.
* @param tag
* The tab tag for id purposes.
* @param label
* The label of the tab displayed to the user.
*/
public void addTab(final ActionBar.Tab newTab, final String tag,
final String label) {
newTab.setTag(tag);
newTab.setText(label);
newTab.setTabListener(this);
getSupportActionBar().addTab(newTab);
}
/**
* This is where you do the work of building the correct fragment based
* on the tab currently selected.
*
* @see FragmentPagerAdapter#getItem(int)
*/
@Override
public Fragment getItem(final int position) {
final Tab tab = getActionBar().getTabAt(position);
if ("MY TAG".equals(tab.getTag().toString()) {
// instantiate the fragment (table) for "MY TAG"
} else {
// instantiate something else...
}
}
/**
* One fragment per tab.
*
* @see android.support.v4.view.PagerAdapter#getCount()
*/
@Override
public int getCount() {
return getSupportActionBar().getTabCount();
}
/**
* @see ViewPager.OnPageChangeListener#onPageScrollStateChanged(int)
*/
@Override
public void onPageScrollStateChanged(final int arg0) {
// No-op.
}
/**
* @see ViewPager.OnPageChangeListener#onPageScrolled(int, float, int)
*/
@Override
public void onPageScrolled(final int arg0, final float arg1,
final int arg2) {
// No-op.
}
/**
* @see ViewPager.OnPageChangeListener#onPageSelected(int)
*/
@Override
public void onPageSelected(final int position) {
getSupportActionBar().setSelectedNavigationItem(position);
}
/**
* @see TabListener#onTabSelected(app.ActionBar.Tab,
* app.FragmentTransaction)
*/
@Override
public void onTabSelected(final Tab tab, final FragmentTransaction ft) {
viewPager.setCurrentItem(tab.getPosition());
}
/**
* @see TabListener#onTabUnselected(ActionBar.Tab,
* app.FragmentTransaction)
*/
@Override
public void onTabUnselected(final Tab tab, final FragmentTransaction ft) {
// No-op.
}
/**
* @see TabListener#onTabReselected(ActionBar.Tab,app.FragmentTransaction)
*/
@Override
public void onTabReselected(final Tab tab, final FragmentTransaction ft) {
// No-op.
}
}
So hopefully by this point we have an activity hosting a 'non-swipeable' view pager and a mechanism for switching tabs in the form of the tab bar underneath the title (or alongside depending on the screen size). From this point I am sure you could customise to replace the tab bar with some navigational arrows.
Note: A lot of that was written from memory but hopefully I've conveyed the gist of where I would go with this.
Update
In response to the updated question: you can set the tab to be any old view. Set the TabSpec accordingly. Apologies I haven't used this myself.