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


}

可以拿去直接用

相关推荐
薿夜4 小时前
SpringSecurity(三)
android
zh_xuan9 小时前
Android Hilt实现依赖注入
android·hilt
freshman_y9 小时前
Qtcreator怎么新建安卓项目?编写一个五子棋游戏APP?
android·qt
时寒的笔记10 小时前
js逆向7_案例惠nong网
android·开发语言·javascript
肯多洛夫斯基11 小时前
安卓工控屏静默连WiFi全攻略
android
极梦网络无忧11 小时前
Android无障碍服务实现抖音直播间界面监控(场控助手核心原理)
android
call me by ur name12 小时前
ERNIE 5.0 Technical Report论文解读
android·开发语言·人工智能·机器学习·ai·kotlin
kerli12 小时前
Compose 组件:Box 核心参数及其 Bias 算法
android·前端
BLUcoding13 小时前
Android 常用控件及核心属性
android
遥不可及zzz13 小时前
[特殊字符] Android AAB 一键安装工具配置指南
android·macos