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;
    }


}

可以拿去直接用

相关推荐
casual_clover1 小时前
Android 设备实现 adb connect 连接的步骤
android·adb
恋猫de小郭1 小时前
Android 确定废弃「屏幕方向锁定」等 API ,如何让 App 适配大屏和 PC/XR 等场景
android·前端·flutter
神仙别闹2 小时前
基于Java(SSM)+Mysql实现移动大厅业务办理(增删改查)
android·java·mysql
木子庆五4 小时前
Android设计模式之模板方法模式
android·设计模式·模板方法模式
孤舟簔笠翁6 小时前
【Audio开发一】android音频问题排查指南
android·音视频
CYRUS_STUDIO8 小时前
Unidbg Trace 反 OLLVM 控制流平坦化(fla)
android·逆向·汇编语言
木子庆五10 小时前
Android设计模式之工厂方法模式
android·设计模式·工厂方法模式
_丿丨丨_11 小时前
PHP回调后门小总结
android·开发语言·php
程序员江同学11 小时前
Kotlin 技术月报 | 2025 年 3 月
android·kotlin
热爱编程的小曾12 小时前
sqli-labs靶场 less 7
android·adb·less