我有 3 Fragments
里面 ViewPager
。我只想在 Fragment
时执行网络调用对用户可见。目前我正在使用以下方法:
@Override
public void setMenuVisibility(boolean menuVisible) {
super.setMenuVisibility(menuVisible);
if (menuVisible) {
isVisible = true;
} else {
isVisible = false;
}
}
但是上述方法的问题是给我 getActivity()
null 在第一 Fragment
。此方法在第二和第三个中效果很好Fragment
。
我尝试使用 setUserVisibleHint()
但这每次都会返回 true。
对于上述问题,有什么万无一失的解决方案呢?我想要一种方法可以告诉我 Fragment
是否与 getActivity()!=null
对用户可见或不可见 .
提前致谢。
最佳答案
在尝试 setUserVisibleHint()
时,当您对所有 3 个 fragment 使用相同的类时,根据调用 setUserVisibleHint()
的位置,您将被调用 3 次或 2 次,但在那一次它将为 true ,剩余次数为 true将为 false,因为当前只有一个 Fragment 可见。
在这种情况下,不要只检查 true 或 false,只需使用一些 Id 检查 true (确保其空指针检查,例如,如果您从第二个位置移动到第三个位置,那么我们通过 setArguments
发送的第一个位置参数将为空)。
示例:
我有一个 Fragment 类用于 ViewPager
中的 3 个 Fragment,当用户将焦点放在 Fragment 上时,我想为一些 View
制作动画。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
startAnimation(); // If I comment this line my View will be hidden always because I am hiding the View when it's not focused on the user
} else {
checkAndHide();
}
}
public void startAnimation() {
// View might not created, when calling this, because setUserVisibleHint get call before onCreateView()
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (mView != null) {
}
}
}, 500);
}
关于android - 如何确保当前Fragment在ViewPager中可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45726099/