Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 碎片变得可见_Android - Fatal编程技术网

Android 碎片变得可见

Android 碎片变得可见,android,Android,每次我的片段对用户可见时,我都希望执行一段代码,调用一个web服务,获取一些数据并将其显示在屏幕上。我让web服务部件等工作,但不确定在什么情况下我必须添加我的代码。。。。我试过: 启动 恢复 奥纳塔克 但我的代码并不是每次都启动 我使用带有SherlockFragment的Android v4 comp库作为基类。onCreateView() 每次更改片段并使新片段可见时调用 @Override public View onCreateView(LayoutInflater inflater,

每次我的片段对用户可见时,我都希望执行一段代码,调用一个web服务,获取一些数据并将其显示在屏幕上。我让web服务部件等工作,但不确定在什么情况下我必须添加我的代码。。。。我试过:

  • 启动
  • 恢复
  • 奥纳塔克
  • 但我的代码并不是每次都启动

    我使用带有SherlockFragment的Android v4 comp库作为基类。

    onCreateView()

    每次更改片段并使新片段可见时调用

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) 
    
    每次用户看到片段时,都会调用
    onResume()
    。如果代码不正确,则代码中还有其他错误

    onCreateView()
    在片段第一次需要绘制其UI时被调用

    更新:这一公认的答案在5年前就已经奏效了-它不再是你可以使用的了

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) { }
        else {  }
    }
    

    查看一下

    这可能很旧,但我发现setUserVisibleHint()在我的许多用例中都不起作用。相反,我不得不使用ViewTreeObserver进行黑客攻击

    基本上,在片段初始化之后,您将在其中获得一个视图,并执行以下操作:

    myViewInFragment.getViewTreeObserver().addOnGlobalLayoutListener(
        new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                myMethodWhenFragmentFirstBecomesVisible();
                myViewInFragment.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        });
    }
    

    下面的方法用于确定片段何时在用户面前可见

    private boolean loding= false; // your boolean flage
    
    @Override
    public void setUserVisibleHint(boolean isFragmentVisible) {
    super.setUserVisibleHint(true);
    if (this.isVisible()) {
        // we check that the fragment is becoming visible first time or not
        if (isFragmentVisible && !loding) {
           //Task to doing while displaying fragment in front of user
            loding = true;         
        }
    }}
    

    看一看,让我知道,发生了什么事?我被这个问题困住了,尝试了很多不同的方法,但这一个是解决办法@keybee-只有当您使用两个片段和新创建的片段处理片段时,才会调用它。@user370305是的,但如果我理解正确,问题是关于如何获得关于用户可见片段的通知。(这里的问题是,例如,您可以创建很多片段,如果您使用后堆栈返回到以前的片段,
    onCreateView
    将永远不会被调用。您应该查看片段文档。活动有很大的不同。。答案是错的。就我所尝试的而言:我有一个FragmentActivity和usi在该活动中调用ViewPager。ViewPager包含4个片段。每当我的应用程序启动时(只有第一个片段可见),都会调用第一和第二个片段的onCreateView()和onResume()方法!这不是我说的吗?onResume始终被调用-也是在应用程序启动时(第一次)随着onCreateView@Lieuwe请考虑删除这个答案,因为它是误导的人谁检查正确的答案,没有什么错误的答案。请参阅Android文档:“OnReal--调用时,片段是可见的用户和积极运行”和“OnCeCaleVIEW”()-调用以使片段实例化其用户界面视图”。这里有相同的问题。文档说明onResume仅在onCreateView()之后调用一次。当您将片段添加到FragmentManager()时,似乎没有关于片段的事件。我不知道如何做。我想我们必须使用FragmentManager.OnBackbackChangedListener()但从Framint的角度来看,没有问题:(这是API 15及以上的版本):(当你按下带有嵌套碎片的后退按钮时,Boot不起作用。在选项卡布局中,Doe对我不起作用。它还被调用用于用户尚不可见的以下选项卡。