当前位置: 首页 > news >正文

Android开发BasePagerAdapter

Android开发BasePagerAdapter

有个基类的PagerAdapter 方便很多

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


}

可以拿去直接用

相关文章:

  • 第四章:优化字符串的使用:案例研究_《C++性能优化指南》notes
  • springboot整合couchbase(集群)
  • 3. 轴指令(omron 机器自动化控制器)——>MC_GearOut
  • 计算机二级WPS Office第七套WPS演示
  • C++vector常用接口和模拟实现
  • 缺省路由配置出接口不能ping通对面路由器的环回接口,但是配置下一跳可以的原因
  • 【Hugging Face 开源库】Diffusers 库 —— 扩散模型
  • 消息队列保证最终一致性的优势
  • Rust 学习笔记(一)
  • NanoGraphrag原理和数据流讲解
  • OkHttps工具类的简单使用
  • Linux上位机开发实践(开源框架和开源算法)
  • 【大模型学习】什么是具身智能
  • 力扣刷题22. 括号生成
  • 抓包工具fiddler的基础知识
  • 【雅思播客09】Turn Left here.
  • AI:昆仑万维 MusiCoT 技术介绍
  • 【深度学习与实战】2.1、线性回归模型与梯度下降法先导案例--最小二乘法(向量形式求解)
  • 使用 Cursor、MCP 和 Figma 实现工程化项目自动化,提升高达 200% 效率
  • LeetCode 2760 最长奇偶性
  • 我驻苏丹使馆建议在苏中国公民尽快撤离
  • 奥利弗·斯通回顾越战50周年:我们不善于总结历史教训
  • 媒体起底“速成洋文凭”灰产链,专家:我们要给学历“祛魅”
  • 纪念苏联伟大卫国战争胜利80周年阅兵彩排,解放军仪仗队亮相
  • 蓝佛安:中方将采取更加积极有为的宏观政策,有信心实现今年5%左右增长目标
  • “五一”假期全社会跨区域人员流动量超14.65亿人次