ViewPager预加载问题和onCreateView多次调用问题的解决

2017-04-16 19:36:32

现在大体上放置ViewPager预加载的方法有两种:

1,在使用ViewPager嵌套Fragment的时候,由于VIewPager的几个Adapter的设置来说,都会有一定的预加载(默认是左右各一个Frament)。通过设置setOffscreenPageLimit(int number) 来设置预加载的熟练,在V4包中,默认的预加载是1,即使你设置为0,也是不起作用的,设置的只能是大于1才会有效果的。我们需要通过更改V4包中的默认属性才可以。


2.限制预加载,会出现滑动过程中卡顿现象。其实Fragment中防止预加载主要是防止数据的预加载,Fragment中的VIew预加载是有好处的,我们可以通过Fragment中的一个方法来达到预加载View 但是不加载数据,在Fragment显示的时候才去加载数据。

下面是我写的代码:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.bajiebao.app.R;


public class ViewPagerFragment extends Fragment
{
    private View mContentView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        /**
         * 防止Fragment多次切换时调用onCreateView重新加载View
         */
        if (null == mContentView)
        {
            mContentView = inflater.inflate(R.layout.fragment_viewpager, null);

            init();

            /**
             * 为了保证一开始加载Fragment的时候判断是否需要加载数据
             */
            if (getUserVisibleHint())
            {
                getNewComerInfo(true);
            }
        }
        else
        {
            /**
             * 缓存的rootView需要判断是否已经被加过parent,
             * 如果有parent需要从parent删除,要不然会发生这个rootview已经有parent的错误。
             */
            ViewGroup parent = (ViewGroup) mContentView.getParent();
            if (parent != null)
            {
                parent.removeView(mContentView);
            }
        }
        return mContentView;
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser)
    {
        /**
         * 判断此Fragment是否正在前台显示
         * 通过判断就知道是否要进行数据加载了
         */
        if (isVisibleToUser && isVisible())
        {
            getNewComerInfo(true);
        }
        super.setUserVisibleHint(isVisibleToUser);
    }
}



通过在这个方法中去加载数据,我发现可以一定程度的实现预加载问题,保证了预加载不会加载数据,只会加载Fragment中的VIew,这样就可以保证了VIewPager滑动的流畅性,也保证了只有切换到一个Fragment的时候才去加载数据的目的。

我觉得这种方法比修改V4包中的预加载数量好的多啊。

参考:http://www.bubuko.com/infodetail-535920.html


  • 2017-02-13 17:50:05

    cURL error 60: SSL certificate problem: unable to get local issuer certificate

    Drupal 8 version uses Guzzle Http Client internally, but under the hood it may use cURL or PHP internals. If you installed PHP cURL on your PHP server it typically uses cURL and you may see an exception with error Peer certificate cannot be authenticated with known CA certificates or error code CURLE_SSL_CACERT (60).

  • 2017-02-16 08:09:01

    HTML中PRE和p的区别

    pre 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。 <pre> 标签的一个常见应用就是用来表示计算机的源代码。

  • 2017-02-16 15:14:14

    动态加载js和css

    开发过程中经常需要动态加载js和css,今天特意总结了一下常用的方法。

  • 2017-02-17 17:11:24

    mysql插入数据后返回自增ID的方法c

    产生的ID 每次连接后保存在服务器中。这意味着函数向一个给定客户端返回的值是该客户端产生对影响AUTO_INCREMENT列的最新语句第一个 AUTO_INCREMENT值的。这个值不能被其它客户端影响,即使它们产生它们自己的 AUTO_INCREMENT值。这个行为保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁或处理