Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Override
- public abstract void onPageSelected(int position) {
- setTitle(getTitleFromPosition(position));
- }
- public interface TitleProvider {
- CharSequence getTitle();
- }
- public class TabsAdapter extends FragmentPagerAdapter implements
- TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener {
- private final FragmentActivity activity;
- private final TabHost tabHost;
- private final ViewPager viewPager;
- private final ArrayList<Fragment> fragments = new ArrayList<Fragment>();
- private final Hashtable<Fragment, Stack<Class<?>>> fragmentBackstack = new Hashtable<Fragment, Stack<Class<?>>>();
- static class DummyTabFactory implements TabHost.TabContentFactory {
- private final Context context;
- public DummyTabFactory(Context context) {
- this.context = context;
- }
- @Override
- public View createTabContent(String tag) {
- View v = new View(context);
- v.setMinimumWidth(0);
- v.setMinimumHeight(0);
- return v;
- }
- }
- public TabsAdapter(FragmentActivity activity, TabHost tabHost,
- ViewPager pager) {
- super(activity.getSupportFragmentManager());
- this.activity = activity;
- this.tabHost = tabHost;
- viewPager = pager;
- tabHost.setOnTabChangedListener(this);
- viewPager.setAdapter(this);
- viewPager.setOnPageChangeListener(this);
- }
- public void addTab(String tag, int drawableId, Fragment fragment,
- int tabIndicatorId) {
- TabSpec tabSpec = tabHost.newTabSpec(tag);
- tabSpec.setContent(new DummyTabFactory(activity.getApplicationContext()));
- View tabIndicator = LayoutInflater.from(
- activity.getApplicationContext()).inflate(tabIndicatorId,
- tabHost.getTabWidget(), false);
- TextView title = (TextView) tabIndicator.findViewById(R.id.tab_title);
- if (fragment instanceof TitleProvider) {
- title.setText(((TitleProvider) fragment).getTitle());
- }
- ImageView icon = (ImageView) tabIndicator.findViewById(R.id.tab_icon);
- icon.setImageResource(drawableId);
- tabSpec.setIndicator(tabIndicator);
- fragments.add(fragment);
- tabHost.addTab(tabSpec);
- notifyDataSetChanged();
- }
- @Override
- public int getCount() {
- return fragments.size();
- }
- @Override
- public Fragment getItem(int position) {
- return fragments.get(position);
- }
- @Override
- public int getItemPosition(Object object) {
- int returnCode;
- if (fragments.contains(object)) {
- returnCode = POSITION_UNCHANGED;
- } else {
- returnCode = POSITION_NONE;
- }
- return returnCode;
- }
- @Override
- public void onTabChanged(String tabId) {
- int position = tabHost.getCurrentTab();
- viewPager.setCurrentItem(position);
- updateTitle();
- }
- @Override
- public void onPageScrolled(int position, float positionOffset,
- int positionOffsetPixels) {
- }
- @Override
- public void onPageSelected(int position) {
- // Unfortunately when TabHost changes the current tab, it kindly
- // also takes care of putting focus on it when not in touch mode.
- // The jerk.
- // This hack tries to prevent this from pulling focus out of our
- // ViewPager.
- TabWidget widget = tabHost.getTabWidget();
- int oldFocusability = widget.getDescendantFocusability();
- widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
- tabHost.setCurrentTab(position);
- widget.setDescendantFocusability(oldFocusability);
- }
- @Override
- public void onPageScrollStateChanged(int state) {
- }
- public void navigate(Fragment fromFragment, Fragment toFragment) {
- startUpdate(viewPager);
- FragmentTransaction transaction = activity.getSupportFragmentManager()
- .beginTransaction();
- transaction.remove(fromFragment);
- transaction.commit();
- Stack<Class<?>> backstack;
- if (fragmentBackstack.containsKey(fromFragment)) {
- backstack = fragmentBackstack.get(fromFragment);
- fragmentBackstack.remove(fromFragment);
- } else {
- backstack = new Stack<Class<?>>();
- }
- backstack.push(fromFragment.getClass());
- fragmentBackstack.put(toFragment, backstack);
- fragments.set(fragments.indexOf(fromFragment), toFragment);
- finishUpdate(viewPager);
- notifyDataSetChanged();
- updateTitle();
- }
- public Boolean navigateBack() {
- startUpdate(viewPager);
- Fragment fromFragment = fragments.get(viewPager.getCurrentItem());
- if (!fragmentBackstack.containsKey(fromFragment))
- return false;
- Stack<Class<?>> backstack = fragmentBackstack.get(fromFragment);
- if (backstack.isEmpty())
- return false;
- fragmentBackstack.remove(fromFragment);
- Fragment toFragment = Fragment.instantiate(activity, backstack.pop()
- .getName());
- fragmentBackstack.put(toFragment, backstack);
- fragments.set(fragments.indexOf(fromFragment), toFragment);
- FragmentTransaction transaction = activity.getSupportFragmentManager()
- .beginTransaction();
- transaction.remove(fromFragment);
- transaction.commit();
- finishUpdate(viewPager);
- notifyDataSetChanged();
- updateTitle();
- return true;
- }
- protected Fragment getCurrentFragment() {
- return fragments.get(viewPager.getCurrentItem());
- }
- protected void updateTitle() {
- Fragment fragment = getCurrentFragment();
- if (fragment instanceof TitleProvider) {
- activity.setTitle(((TitleProvider) fragment).getTitle());
- }
- }
- }
- @Override
- public void onPageSelected(int position) {
- tabHost.setSelectedNavigationItem(position);
- if (position == 0){
- setTitle(R.string.where_is_the_bus);
- }
- else if (position == 1){
- setTitle(R.string.bus_card);
- }
- else if (position == 2){
- setTitle(R.string.favo);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement