android - 在 fragment 第一次可见后立即执行代码

标签 android fragment lifecycle

我有一个 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/

相关文章:

android - getActivity().getActionBar() 在第一个 fragment 崩溃时

javascript - 使用 Ref react ComponentDidMount 生命周期事件

android - 在 Fragment 附加到 FragmentManager 之前不能执行 onGetLayoutInflater()

android - 向上滚动时 StaggeredGridLayout 困惑

android - 非法状态异常 : Invalid tables when trying to query database with ContentProvider

android - 滑出式键盘手机上的固定方向 Activity 生命周期

c# - 在 form_load 和 button_click 中调用函数有什么区别吗?

android - 如何在 Android 的 ViewPager 中的 fragment 中播放 Youtube 视频

android - 如何在没有 dralogfragment 实例的情况下显示来自适配器的 dialogfragment?

android - 使用 Activity 的工具栏从 Fragment 向上导航