• ViewPager+Fragment实现懒加载


    主要实现是复写Fragment下面这个方法,isVisibleToUser这个参数下面有解释:

    /**
    * Set a hint to the system about whether this fragment's UI is currently visible
    * to the user. This hint defaults to true and is persistent across fragment instance
    * state save and restore.
    *
    * <p>An app may set this to false to indicate that the fragment's UI is
    * scrolled out of visibility or is otherwise not directly visible to the user.
    * This may be used by the system to prioritize operations such as fragment lifecycle updates
    * or loader ordering behavior.</p>
    *
    * @param isVisibleToUser true if this fragment's UI is currently visible to the user (default),
    * false if it is not.
    */
    public void setUserVisibleHint(boolean isVisibleToUser) {
        if (!mUserVisibleHint && isVisibleToUser && mState < STARTED) {
            mFragmentManager.performPendingDeferredStart(this);
        }
        mUserVisibleHint = isVisibleToUser;
        mDeferStart = !isVisibleToUser;
    }
    

    注意,这个方法并不是fragment生命周期的一部分,而是Fragment与Viewpager一起使用时,ViewPager设置适配器--FragmentPagerAdapter调用的:

    @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.attach(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;
        }
    

     实现适配器的时候,注意记得调用super就OK,不然这个方法不能触发。

  • 相关阅读:
    javascript简易下拉菜单效果
    精通javascript笔记(智能社)——简易tab选项卡及应用面向对象方法实现
    精通JS正则表达式(转)
    精通javascript笔记(智能社)——数字时钟
    ERROR: transport error 202: bind failed: Address already in use
    理解git对象
    InvocationHandler中invoke()方法的调用问题
    深入理解Java Proxy机制(转)
    IP、子网的详述 ——IP分类、网关地址,子网掩码、子网作用(转)
    getRequestDispatcher()与sendRedirect()的区别
  • 原文地址:https://www.cnblogs.com/aprz512/p/4931064.html
Copyright © 2020-2023  润新知