我有一个 fragment 显示了使用 MPAndroidChart 创建的折线图。加载 fragment 大约需要 200 毫秒。
我想通过在 fragment 变得可见后立即加载图表数据来提高感知的应用程序性能。
因此我需要在 fragment 变得可见后立即执行代码,但只是在它第一次变得可见时执行。
我不能使用 onResume(),因为它在 fragment 可见之前被调用。
注意:我不能使用异步任务,它需要在 UI 线程上完成。
最佳答案
public class MyFragment extends Fragment{
Boolean _areLecturesLoaded =false;
@Override
onCreateView(){
//Inflate the required views. Code gets executed once View is made but not shown
return v;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
//Code executes EVERY TIME user views the fragment
if (isVisibleToUser && !_areLecturesLoaded ) {
_areLecturesLoaded = true;
// Code executes ONLY THE FIRST TIME fragment is viewed.
}
}
}
isVisisbleToUser 是内置的,当用户查看当前 fragment 时为真。在用户第一次看到该 fragment 之前,它将保持为 false。如果您希望每次用户查看 fragment 时都执行一些代码,请将代码放在该区域但在 if 语句之外。
_areLecturesLoaded 被初始化为 false 并且一旦 fragment 第一次出现,它被设置为 true 确保将来不会调用 If 语句并且其中的代码只执行一次
View 小部件按钮等的所有初始化都必须在 onCreate() 中完成,以确保不会出现空指针和其他此类讨厌的异常。
关于android - 在 fragment 第一次可见后立即执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32378635/