Chinaunix首页 | 论坛 | 博客
  • 博客访问: 53294
  • 博文数量: 48
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 260
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-12 11:48
文章分类
文章存档

2016年(48)

我的朋友

分类: Java

2016-11-17 11:54:33

wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改。本文分享其中关于为ViewPager添加布局(Fragment),绑定和处理fragments和viewpager之间的逻辑关系,供技术员参考学习。

点击(此处)折叠或打开

  1. package com.inuoer.util;

  2. import java.util.List;

  3. import android.support.v4.app.Fragment;
  4. import android.support.v4.app.FragmentManager;
  5. import android.support.v4.app.FragmentTransaction;
  6. import android.support.v4.view.PagerAdapter;
  7. import android.support.v4.view.ViewPager;
  8. import android.view.View;
  9. import android.view.ViewGroup;

  10. /**
  11.  * 为ViewPager添加布局(Fragment),绑定和处理fragments和viewpager之间的逻辑关系
  12.  */
  13. public class FragmentViewPagerAdapter extends PagerAdapter implements
  14.         ViewPager.OnPageChangeListener {
  15.     private List<Fragment> fragments; // 每个Fragment对应一个Page
  16.     private FragmentManager fragmentManager;
  17.     private ViewPager viewPager; // viewPager对象
  18.     private int currentPageIndex = 0; // 当前page索引(切换之前)

  19.     private OnExtraPageChangeListener onExtraPageChangeListener; // ViewPager切换页面时的额外功能添加接口

  20.     public FragmentViewPagerAdapter(FragmentManager fragmentManager,
  21.             ViewPager viewPager, List<Fragment> fragments) {
  22.         this.fragments = fragments;
  23.         this.fragmentManager = fragmentManager;
  24.         this.viewPager = viewPager;
  25.         this.viewPager.setAdapter(this);
  26.         this.viewPager.setOnPageChangeListener(this);
  27.     }

  28.     @Override
  29.     public int getCount() {
  30.         return fragments.size();
  31.     }

  32.     @Override
  33.     public boolean isViewFromObject(View view, Object o) {
  34.         return view == o;
  35.     }

  36.     @Override
  37.     public void destroyItem(ViewGroup container, int position, Object object) {
  38.         container.removeView(fragments.get(position).getView()); // 移出viewpager两边之外的page布局
  39.     }

  40.     @Override
  41.     public Object instantiateItem(ViewGroup container, int position) {
  42.         Fragment fragment = fragments.get(position);
  43.         if (!fragment.isAdded()) { // 如果fragment还没有added
  44.             FragmentTransaction ft = fragmentManager.beginTransaction();
  45.             ft.add(fragment, fragment.getClass().getSimpleName());
  46.             ft.commit();
  47.             /**
  48.              * 在用FragmentTransaction.commit()方法提交FragmentTransaction对象后
  49.              * 会在进程的主线程中,用异步的方式来执行。 如果想要立即执行这个等待中的操作,就要调用这个方法(只能在主线程中调用)。
  50.              * 要注意的是,所有的回调和相关的行为都会在这个调用中被执行完成,因此要仔细确认这个方法的调用位置。
  51.              */
  52.             fragmentManager.executePendingTransactions();
  53.         }

  54.         if (fragment.getView().getParent() == null) {
  55.             container.addView(fragment.getView()); // 为viewpager增加布局
  56.         }

  57.         return fragment.getView();
  58.     }

  59.     /**
  60.      * 当前page索引(切换之前)
  61.      *
  62.      * @return
  63.      */
  64.     public int getCurrentPageIndex() {
  65.         return currentPageIndex;
  66.     }

  67.     public OnExtraPageChangeListener getOnExtraPageChangeListener() {
  68.         return onExtraPageChangeListener;
  69.     }

  70.     /**
  71.      * 设置页面切换额外功能监听器
  72.      *
  73.      * @param onExtraPageChangeListener
  74.      */
  75.     public void setOnExtraPageChangeListener(
  76.             OnExtraPageChangeListener onExtraPageChangeListener) {
  77.         this.onExtraPageChangeListener = onExtraPageChangeListener;
  78.     }

  79.     @Override
  80.     public void onPageScrolled(int i, float v, int i2) {
  81.         if (null != onExtraPageChangeListener) { // 如果设置了额外功能接口
  82.             onExtraPageChangeListener.onExtraPageScrolled(i, v, i2);
  83.         }
  84.     }

  85.     @Override
  86.     public void onPageSelected(int i) {
  87.         fragments.get(currentPageIndex).onPause(); // 调用切换前Fargment的onPause()
  88.         // fragments.get(currentPageIndex).onStop(); // 调用切换前Fargment的onStop()
  89.         if (fragments.get(i).isAdded()) {
  90.             // fragments.get(i).onStart(); // 调用切换后Fargment的onStart()
  91.             fragments.get(i).onResume(); // 调用切换后Fargment的onResume()
  92.         }
  93.         currentPageIndex = i;

  94.         if (null != onExtraPageChangeListener) { // 如果设置了额外功能接口
  95.             onExtraPageChangeListener.onExtraPageSelected(i);
  96.         }

  97.     }

  98.     @Override
  99.     public void onPageScrollStateChanged(int i) {
  100.         if (null != onExtraPageChangeListener) { // 如果设置了额外功能接口
  101.             onExtraPageChangeListener.onExtraPageScrollStateChanged(i);
  102.         }
  103.     }

  104.     /**
  105.      * page切换额外功能接口
  106.      */
  107.     static class OnExtraPageChangeListener {
  108.         public void onExtraPageScrolled(int i, float v, int i2) {
  109.         }

  110.         public void onExtraPageSelected(int i) {
  111.         }

  112.         public void onExtraPageScrollStateChanged(int i) {
  113.         }
  114.     }

  115. }


原文详情地址:

wemall doraemonAndroid app商城详情地址:

wemall官网地址:

wemall 开源微商城 ,微信商城,商城源码,三级分销,微生鲜,微水果,微外卖,微订餐---专业的o2o系统

wemall

阅读(525) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~