FragmentPagerAdapter加载fragment并使用setUserVisibleHint()处理预加载时,给textview赋值时出现的空指针异常

public class BaseFragment extends Fragment {
/*布局*/
private View view;
/**/
boolean isVisible = false;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = setRootView(inflater,container);
Log.i("包名:"+getClass().getName(),"onCreateView");
return view; }
protected View setRootView(LayoutInflater inflater, @Nullable ViewGroup container){
return null;
}
protected void initWidght(){};
protected void initData(){};
/**
* 解决预加载
* */
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
Log.i("包名:"+getClass().getName()," setUserVisibleHint 显示"+getUserVisibleHint());
if (getUserVisibleHint()){
onVisible();
isVisible = true;
}else {
// onInvisible();
}
}
/**
* 预加载--显示-加载数据
* */
private void onVisible() {
if (!isVisible){
initWidght();
}
}
/**
* 预加载--不显示时
* */
private void onInvisible() {
isVisible = false;
}
protected <T extends View>T getView(int resourcesId){
return (T) view.findViewById(resourcesId);
}
/**
* Toast提示;
* @param content 提示内容;
*/
protected void showToast(String content) {
Toast.makeText(getActivity(), content, Toast.LENGTH_SHORT).show();
}
}
public class IndexChatFragment extends BaseFragment {
TextView mTextView;
@Override
protected View setRootView(LayoutInflater inflater, @Nullable ViewGroup container) {
return inflater.inflate(R.layout.fragment_index_chat,container,false);
} @Override
protected void initWidght() {
mTextView = getView(R.id.ceshi);
mTextView.setText("赋值测试");
}

出现了这个错误

测试发现具体问题是:只有加载的第一个Fragment会出现这种状况,后边则可以正常显示

最后打印了生命周期才发现是这样的,setUserVisibleHint是比oncreateView先加载,所以第一个调用setUserVisibleHint时是空

onCreateView和setUserVisibleHint都调用onvisible(),两个条件同事满足则加载布局或者数据

view也可以单独换成一个标记,在oncreateView里赋值true

FragmentPagerAdapter加载fragment并使用setUserVisibleHint()处理预加载时遇到的坑,给textview赋值时出现的空指针异常的更多相关文章

  1. 动态加载/删除css文件以及图片预加载

    动态加载/删除css文件以及图片预加载   功能模块页面   最近,工作中遇到了一个比较奇葩的需求:要在一个页面(PC端)增加一个功能模块,但是这个页面在不久之后要重构,为了新增加的模块可以继续复用, ...

  2. Android 加载gif图片强大框架(支持预加载、缓存,还支持显示静态图片,一行代码全搞定)

    之前项目中没有涉及到显示gif图片的功能,也没有着重研究过,最近项目中要用到显示gif图片,于是就在网上一顿搜,用过之后发现如下几个缺点. 1.加载大的gif图片会出现oom. 2.没有预加载和缓存功 ...

  3. 防止ViewPager和Fragment结合使用时候的数据预加载

    不知道你们使用ViewPager和Fragment结合的时候发现一个问题没,如果你的每个Fragment都需要请求网络数据,并且你在请求网络数据的时候会加入进度对话框的加载显示效果,当你显示第一个Fr ...

  4. viewpager和fragment预加载的解决

    在使用Viewpager和fragment处理中会出现预加载的问题,最近看别人的代码,终于找到了一个很好的处理方法 能有效的解决预加载的问题,在fragment都继承一个重写setUserVisibl ...

  5. android Viewpager取消预加载及Fragment方法的学习

    1.在使用ViewPager嵌套Fragment的时候,由于VIewPager的几个Adapter的设置来说,都会有一定的预加载.通过设置setOffscreenPageLimit(int numbe ...

  6. js中的预加载与懒加载(延迟加载)

    js中加载分两种:预加载与延迟加载 一.  预加载,增强用户的体验,但会加载服务器的负担.一般会使用多种 CSS(background).JS(Image).HTML(<img />) . ...

  7. 转载:用Jquery实现的图片预加载技术,可以实现有序加载和无序加载!

    一.背景 我们在做页面的时候,从用户体验的角度出发,肯定是希望用户以最快的速度看到完整的页面信息,但在实际情况中经常会遇到些问题. 比如受网速影响,页面加载素材的时间比较长,页面会出现短时间的错乱或者 ...

  8. JS代理模式实现图片预加载

    ---恢复内容开始--- 刚刚说了懒加载,现在我们来搞搞预加载吧 预加载的核心: 图片等静态资源在使用前提前请求. 资源后续使用可以直接从缓存中加载,提升用户体验. 几个误区: 预加载不是为了减少页面 ...

  9. JS图片预加载插件

    在开发H5项目中有时候会遇到要加载大量图片的情况,利用预加载技术可以提高用户浏览时的体验. 1)概念:懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片.预加载:提前加载 ...

随机推荐

  1. win7里边使用telnet命令为什么提示telnet不是内部或外部命令,也不是可运行的程序或批处理文件

    Win7默认没有安装telnet功能,所以你直接用telnet命令是用不了的:你可以去“控制面板”-->“程序”(在左下角)--->“打开或关闭Windows功能”,勾上“telnet客户 ...

  2. 如何使用DOS命令(cd命令)

    如何使用DOS命令 DOS是Disk Operation System(磁盘操作系统)的简称,是个人计算机上的一类操作系统.它直接操纵管理硬盘的文件,一般都是黑底白色文字的界面.顾名思义,DOS主要是 ...

  3. cookie---session

    //以下文字摘自慕课网教程..... 设置cookie PHP设置Cookie最常用的方法就是使用setcookie函数,setcookie具有7个可选参数,我们常用到的为前5个: name( Coo ...

  4. 异常 Exception

    异常:是指在程序运行的过程中发生的一些不正常的时间. 分为受查异常和非受查异常. 受查异常:编译时期出现的异常   除了RuntimeException的异常,必须处理以及throws 非受查异常:运 ...

  5. todo

     ID生成器要做成兼容分布式, 数据库ef控制要改成手动升级, 异常日志模块,操作日志某快,,, 日志服务器,, 图片服务器,,,动静分离, 前后台分离,, 可扩展性,无状态化集群弹性部署, 数据库主 ...

  6. HttpContext.Cache属性

    HttpContext基于HttpApplication的处理管道,由于HttpContext对象贯穿整个处理过程,所以,可以从HttpApplication处理管道的前端将状态数据传递到管道的后端, ...

  7. XML文件(1)--使用DOM示例

    其他依赖字段/方法 // 书籍列表 private List<Book> bookList = new LinkedList<Book>(); /** * 根据xml文件,得到 ...

  8. jquery select操作大全

    添加option $("#ID option").each(function(){ if($(this).val() == 111){ $(this).remove(); } }) ...

  9. 在利用xampp开发时候为apache设置多个项目目录

    在做毕业设计的时候由于想将工作目录与毕业设计的目录分离,所以有此需求: 下面两种方法是google出来的,分别通过配置多ip和多端口实现,不是能否用单ip发布多个项目,如有方法请留言,学习一下 1.配 ...

  10. Canvas制作天气预报走势图

    要实现的效果如下图: HTML代码如下: ;;;;;;;;;;; }