Only use ViewPager for NetDb stats

This commit is contained in:
str4d
2013-11-09 12:25:03 +00:00
parent 2a050b3ca1
commit fbc56d4eb9
5 changed files with 142 additions and 98 deletions

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<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.PagerTitleStrip
android:id="@+id/pager_title_strip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top" />
</android.support.v4.view.ViewPager>

View File

@ -323,7 +323,7 @@ public abstract class I2PActivityBase extends ActionBarActivity implements
}
public static class TabListener implements ActionBar.TabListener {
private Fragment mFragment;
protected Fragment mFragment;
public TabListener(Fragment fragment) {
mFragment = fragment;

View File

@ -1,27 +1,25 @@
package net.i2p.android.router.activity;
import net.i2p.android.router.R;
import net.i2p.android.router.fragment.NetDbSummaryTableFragment;
import net.i2p.android.router.fragment.NetDbListFragment;
import net.i2p.android.router.fragment.NetDbSummaryPagerFragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.Tab;
public class NetDbActivity extends I2PActivityBase {
static final int TAB_SUMMARY = 0;
static final int TAB_ROUTERS = 1;
static final int TAB_LEASESETS = 2;
/**
* Whether or not the activity is in two-pane mode, i.e. running on a tablet
* device.
*/
private boolean mTwoPane;
private static final String SELECTED_TAB = "selected_tab";
NetDbPagerAdapter mNetDbPagerAdapter;
ViewPager mViewPager;
@Override
protected boolean useViewPager() {
protected boolean canUseTwoPanes() {
return true;
}
@ -33,54 +31,50 @@ public class NetDbActivity extends I2PActivityBase {
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Set up NetDbPagerAdapter containing the categories
mNetDbPagerAdapter = new NetDbPagerAdapter(getSupportFragmentManager());
// Set up ViewPager for swiping between categories
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mNetDbPagerAdapter);
mViewPager.setOnPageChangeListener(
new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
mViewPager.setCurrentItem(position);
}
});
// Set up TabListener to update NetDbPagerAdapter with the
// current section to display categories for
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
public void onTabSelected(Tab tab, FragmentTransaction ft) {
mNetDbPagerAdapter.setCurrentSection(tab.getPosition());
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
mNetDbPagerAdapter.setCurrentSection(TAB_SUMMARY);
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// User selected the already selected tab.
}
};
// Statistics tab
NetDbSummaryPagerFragment sf = new NetDbSummaryPagerFragment();
actionBar.addTab(
actionBar.newTab()
.setText("Statistics")
.setTabListener(tabListener));
.setTabListener(new NetDbSummaryPagerTabListener(sf)));
// Routers tab
NetDbListFragment rf = new NetDbListFragment();
Bundle args = new Bundle();
args.putBoolean(NetDbListFragment.SHOW_ROUTERS, true);
rf.setArguments(args);
actionBar.addTab(
actionBar.newTab()
.setText("Routers")
.setTabListener(tabListener));
.setTabListener(new TabListener(rf)));
// LeaseSets tab
NetDbListFragment lf = new NetDbListFragment();
args = new Bundle();
args.putBoolean(NetDbListFragment.SHOW_ROUTERS, false);
lf.setArguments(args);
actionBar.addTab(
actionBar.newTab()
.setText("LeaseSets")
.setTabListener(tabListener));
.setTabListener(new TabListener(lf)));
if (savedInstanceState != null) {
int selected = savedInstanceState.getInt(SELECTED_TAB);
actionBar.setSelectedNavigationItem(selected);
}
if (findViewById(R.id.detail_fragment) != null) {
// The detail container view will be present only in the
// large-screen layouts (res/values-large and
// res/values-sw600dp). If this view is present, then the
// activity should be in two-pane mode.
mTwoPane = true;
// In two-pane mode, list items should be given the
// 'activated' state when touched.
//rf.setActivateOnItemClick(true);
//lf.setActivateOnItemClick(true);
}
}
@Override
@ -90,61 +84,22 @@ public class NetDbActivity extends I2PActivityBase {
getSupportActionBar().getSelectedNavigationIndex());
}
public class NetDbPagerAdapter extends FragmentStatePagerAdapter {
private int mSection;
public NetDbPagerAdapter(FragmentManager fm) {
super(fm);
mSection = TAB_SUMMARY;
}
public void setCurrentSection(int section) {
// Change the ViewPager item (in case the
// new section doesn't have as many items)
mViewPager.setCurrentItem(0);
// Update the section
mSection = section;
notifyDataSetChanged();
public static class NetDbSummaryPagerTabListener extends TabListener {
public NetDbSummaryPagerTabListener(Fragment fragment) {
super(fragment);
}
@Override
public Fragment getItem(int i) {
switch (mSection) {
case TAB_ROUTERS:
case TAB_LEASESETS:
default: // TAB_SUMMARY
return NetDbSummaryTableFragment.newInstance(i);
}
}
@Override
public int getCount() {
switch (mSection) {
case TAB_ROUTERS:
return 2;
case TAB_LEASESETS:
return 1;
default: // TAB_SUMMARY
return 3;
}
}
@Override
public CharSequence getPageTitle(int i) {
switch (mSection) {
case TAB_ROUTERS:
case TAB_LEASESETS:
return "CAT " + (i + 1);
default: // TAB_SUMMARY
switch (i) {
case 1:
return "Countries";
case 2:
return "Transports";
default:
return "Versions";
}
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
/**
* This is a work-around for Issue 42601
* https://code.google.com/p/android/issues/detail?id=42601
*
* The method getChildFragmentManager() does not clear up
* when the Fragment is detached.
*/
mFragment = new NetDbSummaryPagerFragment();
super.onTabSelected(tab, ft);
}
}
}

View File

@ -0,0 +1,8 @@
package net.i2p.android.router.fragment;
import android.support.v4.app.Fragment;
public class NetDbListFragment extends Fragment {
public static final String SHOW_ROUTERS = "show_routers";
}

View File

@ -0,0 +1,69 @@
package net.i2p.android.router.fragment;
import net.i2p.android.router.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class NetDbSummaryPagerFragment extends Fragment {
NetDbPagerAdapter mNetDbPagerAdapter;
ViewPager mViewPager;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.parentfragment_viewpager, container, false);
return v;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// Set up NetDbPagerAdapter containing the categories
mNetDbPagerAdapter = new NetDbPagerAdapter(getChildFragmentManager());
// Set up ViewPager for swiping between categories
mViewPager = (ViewPager) getActivity().findViewById(R.id.pager);
mViewPager.setAdapter(mNetDbPagerAdapter);
mViewPager.setOnPageChangeListener(
new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
mViewPager.setCurrentItem(position);
}
});
}
public class NetDbPagerAdapter extends FragmentStatePagerAdapter {
public NetDbPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
return NetDbSummaryTableFragment.newInstance(i);
}
@Override
public int getCount() {
return 3;
}
@Override
public CharSequence getPageTitle(int i) {
switch (i) {
case 1:
return "Countries";
case 2:
return "Transports";
default:
return "Versions";
}
}
}
}