Java tutorial
/* * Copyright (C) 2014 loQua.Xee <loquaciouser@gmail.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.fastexample.adapter; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.View; import android.view.ViewGroup; import java.util.List; /** * ViewPagerFragment?fragmentsviewpager * <p/> * Created with IntelliJ IDEA. * Author: wangjie email:tiantian.china.2@gmail.com * Date: 13-10-11 * Time: ?3:03 */ public class FragmentViewPagerAdapter extends PagerAdapter implements ViewPager.OnPageChangeListener { private List<Fragment> fragments; // ?FragmentPage private FragmentManager fragmentManager; private ViewPager viewPager; // viewPager private int currentPageIndex = 0; // ?page?? private OnExtraPageChangeListener onExtraPageChangeListener; // ViewPager???? public FragmentViewPagerAdapter(FragmentManager fragmentManager, ViewPager viewPager, List<Fragment> fragments) { this.fragments = fragments; this.fragmentManager = fragmentManager; this.viewPager = viewPager; this.viewPager.setAdapter(this); this.viewPager.setOnPageChangeListener(this); } @Override public int getCount() { return fragments.size(); } @Override public boolean isViewFromObject(View view, Object o) { return view == o; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(fragments.get(position).getView()); // viewpagerpage } @Override public Object instantiateItem(ViewGroup container, int position) { Fragment fragment = fragments.get(position); if (!fragment.isAdded()) { // fragmentadded FragmentTransaction ft = fragmentManager.beginTransaction(); ft.add(fragment, fragment.getClass().getSimpleName()); ft.commit(); /** * FragmentTransaction.commit()??FragmentTransaction? * ?? * ????? * ????? */ fragmentManager.executePendingTransactions(); } if (fragment.getView().getParent() == null) { container.addView(fragment.getView()); // viewpager } return fragment.getView(); } /** * ?page?? * * @return */ public int getCurrentPageIndex() { return currentPageIndex; } public OnExtraPageChangeListener getOnExtraPageChangeListener() { return onExtraPageChangeListener; } /** * ???? * * @param onExtraPageChangeListener */ public void setOnExtraPageChangeListener(OnExtraPageChangeListener onExtraPageChangeListener) { this.onExtraPageChangeListener = onExtraPageChangeListener; } @Override public void onPageScrolled(int i, float v, int i2) { if (null != onExtraPageChangeListener) { // ?? onExtraPageChangeListener.onExtraPageScrolled(i, v, i2); } } @Override public void onPageSelected(int i) { fragments.get(currentPageIndex).onPause(); // ??FargmentonPause() // fragments.get(currentPageIndex).onStop(); // ??FargmentonStop() if (fragments.get(i).isAdded()) { // fragments.get(i).onStart(); // ??FargmentonStart() fragments.get(i).onResume(); // ??FargmentonResume() } currentPageIndex = i; if (null != onExtraPageChangeListener) { // ?? onExtraPageChangeListener.onExtraPageSelected(i); } } @Override public void onPageScrollStateChanged(int i) { if (null != onExtraPageChangeListener) { // ?? onExtraPageChangeListener.onExtraPageScrollStateChanged(i); } } /** * page??? */ public static class OnExtraPageChangeListener { public void onExtraPageScrolled(int i, float v, int i2) { } public void onExtraPageSelected(int i) { } public void onExtraPageScrollStateChanged(int i) { } } }