有时候在fragment的setUserVisibleHint方法中getActivity为null,出现这个问题的原因就是因为setUserVisibleHint并不属于Fragment生命周期的方法,该方法是Adapter在Fragment.onCreate前进行调用,因而还没有进行上下文的初始化,此时获取的Activity自然是null的。
有时候我们在处理Fragment业务逻辑初始化的时候可能会用到下面的方式
int mFirstRun = 0;
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser){
if (mFirstRun == 0) {
mFirstRun++;
return;
}
// 业务代码
}
其实这种方式是不推荐的,正确的方法应该是这样:
viewPager.setCurrentItem(index);
然后再Fragment.onResume中getActivity().getCurrIndex();来判断用户是否切换到当前fragment,如果不是用户切换的话就无视。(ViewPager+Fragment用起来很别扭!!!)
有时候在fragment的setUserVisibleHint方法中getActivity为null,出现这个问题的原因就是因为setUserVisibleHint并不属于Fragment生命周期的方法,该方法是Adapter在Fragment.onCreate前进行调用,因而还没有进行上下文的初始化,此时获取的Activity自然是null的。有时候我们在处理Fragment业务逻辑初始化的...
一开始不知道这个方法,用到tablayout+ viewpager,viewpager里面包含的是
fragment
,有这样的需求就是,每次滑动需要刷新当前页面,百度一看,有两个方法可以实现,1.
set
U
serVi
sibleH
int
2.onHiddenChanged
如果
使用
的是上面这张viewpager+tablayout 这种方法,用
set
U
serVi
sibleH
int
可以有效的实现刷新数据...
1.在
使用
ViewPager嵌套
Fragment
的时候,由于VIewPager的几个Adapter的设置来说,都会有一定的预加载。通过设置
set
OffscreenPageLimit(
int
number) 来设置预加载的熟练,在V4包中,默认的预加载是1,即使你设置为0,也是不起作用的,设置的只能是大于1才会有效果的。我们需要通过更改V4包中的默认属性才可以。
更改过的V4 包下载地址:
ht...
activity
_main viewpager+
fragment
+侧滑的切换布局
<?xml version="1.0" encoding="utf-8"?>
<
android
.support.v4.widget.DrawerLayout xmlns:
android
="http:/
本篇文章主要提供一种监听
Fragment
可见性监听的方案,完美适配多种 case,有兴趣的可以看看。废话不多说,开始进入正文。
在开发当中,
fragment
经常
使用
到。在很多应用场景中,我们需要监听到
fragment
的显示与隐藏,来进行一些操作。比如,统计页面的停留时长,页面隐藏的时候停止播放视频。
有些同学可能会说了,这还不容易,直接监听
Fragment
的onResume,onPause。我只能说,兄弟,too young,too simple。
下面,让我们一起来实现 fragmen
Android
应用开发过程中,ViewPager同时加载多个
fragment
,以实现多tab页面快速切换, 但是
fragment
初始化时若加载的内容较多,就可能导致整个应用启动速度缓慢,影响用户体验。
为了提高用户体验,我们会
使用
”懒加载”方案,实现分批加载。
那么,
set
U
serVi
sibleH
int
什么时候调用呢
原因(
fragment
+TabLayout+ViewPager):
使用
了这个:BEHAVIOR_RESUME_ONLY_CURRENT_
FRAGMENT
而不是说这个:BEHAVIOR_
SET
_USER_VISIBLE_H
INT
使用
这个:BEHAVIOR_RESUME_ONLY_CURRENT_
FRAGMENT
的源码追踪:
现在越来越多的应用会
使用
viewpager+
fragment
显示自己的内容页,
fragment
和
activity
有很多共同点,如下图就是
fragment
的生命周期
但是
fragment
和
activity
不同的是当调用本身的onResume和onPause方法的时候可能并不是当前的
fragment
在显示,例如当加载下面这张图时,当我打开Main
Activity
时显示的是第一个
fragment
Int
eger::parse
Int
Int
eger类的方法:public static
int
parse
Int
(String s) 将此String转换为
int
类型数据
定义一个接口(Converter),里面定义一个抽象方法
int
convert(String s);
定义一个测试类(ConverterDemo),在测试类中提供两个方法
一个方法是
set
U
serVi
sibleH
int
()方法用于在
Fragment
的可见性发生变化时通知
Fragment
。它有两个参数:
1. isVisibleToUser:表示
Fragment
的可见性是否发生变化,true表示
Fragment
变为可见状态,false表示
Fragment
变为不可见状态。
2. savedInstanceState:表示
Fragment
保存的状态信息,可以为
null
。
在
Fragment
中
使用
set
U
serVi
sibleH
int
()方法,可以在
Fragment
可见性变化时执行一些操作,比如懒加载数据等。具体
使用
方法如下:
@Override
public void
set
U
serVi
sibleH
int
(boolean isVisibleToUser) {
super.
set
U
serVi
sibleH
int
(isVisibleToUser);
if (isVisibleToUser) {
//
Fragment
变为可见状态,执行懒加载数据等操作
loadData();
} else {
//
Fragment
变为不可见状态
注意:
set
U
serVi
sibleH
int
()方法在
Fragment
的生命周期中可能会多次调用,因此需要注意避免重复执行操作。