Android开发BasePagerAdapter

Android开发BasePagerAdapter

有个基类的PagerAdapter 方便很多

java 复制代码
public class BasePagerAdapter extends FragmentPagerAdapter {
    private static final String TAG = "FragmentPagerAdapter";
    private static final boolean DEBUG = false;

    private final FragmentManager mFragmentManager;
    private FragmentTransaction mCurTransaction = null;
    private Fragment mCurrentPrimaryItem = null;
    private List<? extends BaseFragment> fragments;
    private Context mContext;

    public BasePagerAdapter(Context mContext, FragmentManager fm, List<? extends BaseFragment> fragments) {
        super(fm);
        this.mContext = mContext;
        mFragmentManager = fm;
        this.fragments = fragments;
    }


    @Override
    public int getCount() {
        return fragments.size();
    }

    /**
     * Return the Fragment associated with a specified position.
     */
    public BaseFragment getItem(int position) {

        return fragments.get(position);
    }


    @Override
    public void startUpdate(ViewGroup container) {
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        if (mCurTransaction == null) {
            mCurTransaction = mFragmentManager.beginTransaction();
        }

        final long itemId = getItemId(position);

        // Do we already have this fragment?
        String name = makeFragmentName(container.getId(), itemId);
        Fragment fragment = mFragmentManager.findFragmentByTag(name);
        if (fragment != null) {
            if (DEBUG) Log.v(TAG, "Attaching item #" + itemId + ": f=" + fragment);
            mCurTransaction.show(fragment);
        } else {
            fragment = getItem(position);
            if (DEBUG) Log.v(TAG, "Adding item #" + itemId + ": f=" + fragment);
            mCurTransaction.add(container.getId(), fragment,
                    makeFragmentName(container.getId(), itemId));
        }
        if (fragment != mCurrentPrimaryItem) {
            fragment.setMenuVisibility(false);
            fragment.setUserVisibleHint(false);
        }

        return fragment;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        if (mCurTransaction == null) {
            mCurTransaction = mFragmentManager.beginTransaction();
        }
        if (DEBUG) Log.v(TAG, "Detaching item #" + getItemId(position) + ": f=" + object
                + " v=" + ((Fragment) object).getView());
        if (position > fragments.size()) {
            if (DEBUG) Log.i(TAG, "remove fragment");

            mCurTransaction.remove((Fragment) object);
        } else {
            mCurTransaction.hide((Fragment) object);
        }

    }

    @Override
    public void setPrimaryItem(ViewGroup container, int position, Object object) {
        Fragment fragment = (Fragment) object;
        if (fragment != mCurrentPrimaryItem) {
            if (mCurrentPrimaryItem != null) {
                mCurrentPrimaryItem.setMenuVisibility(false);
                mCurrentPrimaryItem.setUserVisibleHint(false);
            }
            if (fragment != null) {
                fragment.setMenuVisibility(true);
                fragment.setUserVisibleHint(true);
            }
            mCurrentPrimaryItem = fragment;
        }
    }

    @Override
    public void finishUpdate(ViewGroup container) {
        if (mCurTransaction != null) {
            mCurTransaction.commitAllowingStateLoss();
            mCurTransaction = null;
            mFragmentManager.executePendingTransactions();
        }
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return ((Fragment) object).getView() == view;
    }

    @Override
    public Parcelable saveState() {
        return null;
    }

    @Override
    public void restoreState(Parcelable state, ClassLoader loader) {
    }


    public long getItemId(int position) {
        return position;
    }

    private static String makeFragmentName(int viewId, long id) {
        return "android:switcher:" + viewId + ":" + id;
    }


}

可以拿去直接用

相关推荐
Mr YiRan2 分钟前
Android Gradle多渠道打包
android
IvanCodes1 小时前
MySQL 视图
android·数据库·sql·mysql·oracle
KevinWang_1 小时前
Java 和 Kotlin 混编导致的 bug
android·kotlin
好学人2 小时前
Android动画系统全面解析
android
leverge20092 小时前
android studio 运行java main报错
android·ide·android studio
RichardLai882 小时前
Flutter 环境搭建
android·flutter
思想觉悟2 小时前
ubuntu编译android12源码
android·ubuntu·源码
好学人2 小时前
Android自定义控件事件传递机制
android
V少年2 小时前
深入浅出 C++ 标准库
android
V少年2 小时前
深入浅出 C++ 特有关键字
android