Advertisement
Guest User

Untitled

a guest
Apr 18th, 2015
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.22 KB | None | 0 0
  1. @Override
  2. public abstract void onPageSelected(int position) {
  3. setTitle(getTitleFromPosition(position));
  4. }
  5.  
  6. public interface TitleProvider {
  7. CharSequence getTitle();
  8. }
  9.  
  10. public class TabsAdapter extends FragmentPagerAdapter implements
  11. TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener {
  12. private final FragmentActivity activity;
  13. private final TabHost tabHost;
  14. private final ViewPager viewPager;
  15. private final ArrayList<Fragment> fragments = new ArrayList<Fragment>();
  16. private final Hashtable<Fragment, Stack<Class<?>>> fragmentBackstack = new Hashtable<Fragment, Stack<Class<?>>>();
  17.  
  18. static class DummyTabFactory implements TabHost.TabContentFactory {
  19. private final Context context;
  20.  
  21. public DummyTabFactory(Context context) {
  22. this.context = context;
  23. }
  24.  
  25. @Override
  26. public View createTabContent(String tag) {
  27. View v = new View(context);
  28. v.setMinimumWidth(0);
  29. v.setMinimumHeight(0);
  30. return v;
  31. }
  32. }
  33.  
  34. public TabsAdapter(FragmentActivity activity, TabHost tabHost,
  35. ViewPager pager) {
  36. super(activity.getSupportFragmentManager());
  37. this.activity = activity;
  38. this.tabHost = tabHost;
  39. viewPager = pager;
  40. tabHost.setOnTabChangedListener(this);
  41. viewPager.setAdapter(this);
  42. viewPager.setOnPageChangeListener(this);
  43. }
  44.  
  45. public void addTab(String tag, int drawableId, Fragment fragment,
  46. int tabIndicatorId) {
  47. TabSpec tabSpec = tabHost.newTabSpec(tag);
  48. tabSpec.setContent(new DummyTabFactory(activity.getApplicationContext()));
  49.  
  50. View tabIndicator = LayoutInflater.from(
  51. activity.getApplicationContext()).inflate(tabIndicatorId,
  52. tabHost.getTabWidget(), false);
  53. TextView title = (TextView) tabIndicator.findViewById(R.id.tab_title);
  54.  
  55. if (fragment instanceof TitleProvider) {
  56. title.setText(((TitleProvider) fragment).getTitle());
  57. }
  58.  
  59. ImageView icon = (ImageView) tabIndicator.findViewById(R.id.tab_icon);
  60. icon.setImageResource(drawableId);
  61.  
  62. tabSpec.setIndicator(tabIndicator);
  63.  
  64. fragments.add(fragment);
  65. tabHost.addTab(tabSpec);
  66. notifyDataSetChanged();
  67. }
  68.  
  69. @Override
  70. public int getCount() {
  71. return fragments.size();
  72. }
  73.  
  74. @Override
  75. public Fragment getItem(int position) {
  76. return fragments.get(position);
  77. }
  78.  
  79. @Override
  80. public int getItemPosition(Object object) {
  81. int returnCode;
  82. if (fragments.contains(object)) {
  83. returnCode = POSITION_UNCHANGED;
  84. } else {
  85. returnCode = POSITION_NONE;
  86. }
  87. return returnCode;
  88. }
  89.  
  90. @Override
  91. public void onTabChanged(String tabId) {
  92. int position = tabHost.getCurrentTab();
  93. viewPager.setCurrentItem(position);
  94. updateTitle();
  95. }
  96.  
  97. @Override
  98. public void onPageScrolled(int position, float positionOffset,
  99. int positionOffsetPixels) {
  100. }
  101.  
  102. @Override
  103. public void onPageSelected(int position) {
  104. // Unfortunately when TabHost changes the current tab, it kindly
  105. // also takes care of putting focus on it when not in touch mode.
  106. // The jerk.
  107. // This hack tries to prevent this from pulling focus out of our
  108. // ViewPager.
  109. TabWidget widget = tabHost.getTabWidget();
  110. int oldFocusability = widget.getDescendantFocusability();
  111. widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
  112. tabHost.setCurrentTab(position);
  113. widget.setDescendantFocusability(oldFocusability);
  114. }
  115.  
  116. @Override
  117. public void onPageScrollStateChanged(int state) {
  118. }
  119.  
  120. public void navigate(Fragment fromFragment, Fragment toFragment) {
  121. startUpdate(viewPager);
  122.  
  123. FragmentTransaction transaction = activity.getSupportFragmentManager()
  124. .beginTransaction();
  125. transaction.remove(fromFragment);
  126. transaction.commit();
  127.  
  128. Stack<Class<?>> backstack;
  129. if (fragmentBackstack.containsKey(fromFragment)) {
  130. backstack = fragmentBackstack.get(fromFragment);
  131. fragmentBackstack.remove(fromFragment);
  132. } else {
  133. backstack = new Stack<Class<?>>();
  134. }
  135. backstack.push(fromFragment.getClass());
  136. fragmentBackstack.put(toFragment, backstack);
  137.  
  138. fragments.set(fragments.indexOf(fromFragment), toFragment);
  139. finishUpdate(viewPager);
  140. notifyDataSetChanged();
  141. updateTitle();
  142. }
  143.  
  144. public Boolean navigateBack() {
  145. startUpdate(viewPager);
  146. Fragment fromFragment = fragments.get(viewPager.getCurrentItem());
  147.  
  148. if (!fragmentBackstack.containsKey(fromFragment))
  149. return false;
  150. Stack<Class<?>> backstack = fragmentBackstack.get(fromFragment);
  151. if (backstack.isEmpty())
  152. return false;
  153.  
  154. fragmentBackstack.remove(fromFragment);
  155. Fragment toFragment = Fragment.instantiate(activity, backstack.pop()
  156. .getName());
  157. fragmentBackstack.put(toFragment, backstack);
  158.  
  159. fragments.set(fragments.indexOf(fromFragment), toFragment);
  160.  
  161. FragmentTransaction transaction = activity.getSupportFragmentManager()
  162. .beginTransaction();
  163. transaction.remove(fromFragment);
  164. transaction.commit();
  165.  
  166. finishUpdate(viewPager);
  167. notifyDataSetChanged();
  168. updateTitle();
  169. return true;
  170. }
  171.  
  172. protected Fragment getCurrentFragment() {
  173. return fragments.get(viewPager.getCurrentItem());
  174. }
  175.  
  176. protected void updateTitle() {
  177. Fragment fragment = getCurrentFragment();
  178. if (fragment instanceof TitleProvider) {
  179. activity.setTitle(((TitleProvider) fragment).getTitle());
  180. }
  181. }
  182. }
  183.  
  184. @Override
  185. public void onPageSelected(int position) {
  186. tabHost.setSelectedNavigationItem(position);
  187. if (position == 0){
  188. setTitle(R.string.where_is_the_bus);
  189. }
  190. else if (position == 1){
  191. setTitle(R.string.bus_card);
  192. }
  193. else if (position == 2){
  194. setTitle(R.string.favo);
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement