检测片段何时变得可见

14 浏览
0 Comments

检测片段何时变得可见

为什么不是一个重复的问题:建议的帖子仅适用于视图页,或者在调用onResume时使用。

我有一个列表片段和一个详细片段。当点击列表项时,会打开详细片段。我通过隐藏列表片段并显示详细片段来实现这一点。当用户返回时,他会返回到列表片段。

如何检测用户何时返回到我的片段,或者我的片段何时可见?

请注意,我想继续使用.hide()和.show()方法,并且我正在寻找一个监听器或onVisible方法来检查片段何时变为可见,并不是一个用来检查它是否可见的方法。

0
0 Comments

问题出现的原因:

- 当Fragment开始时,我们希望能够检测到其可见性。然而,Fragment的生命周期方法onStart并不在Fragment再次可见时调用。

解决方法:

- 通过重写Fragment的onStart方法,我们可以在Fragment开始时发送一个事件给Activity。

- 我们可以创建一个接口MyInterface,其中包含一个onFragmentVisible方法,用于在Fragment可见时回调给Activity。

- Activity需要实现这个接口,并在onStart方法中调用((MyInterface)getActivity()).onFragmentIsVisible(this)来接收Fragment可见的回调。

- 另一种更简单的方法是使用一个事件总线库,如RoboGuice的事件总线,Otto或EventBus。

下面是一种可能的解决方法的代码示例:

public class YourFragment extends Fragment {
    @Override
    public void onStart() {
        super.onStart();
        ((MyInterface)getActivity()).onFragmentIsVisible(this);
    }
}
public interface MyInterface {
    void onFragmentVisible(Fragment fragment);
}
public class YourActivity extends AppCompatActivity implements MyInterface {
    @Override
    public void onFragmentVisible(Fragment fragment) {
        // 处理Fragment可见的逻辑
    }
}

注意:由于onStart方法不会在Fragment再次可见时被调用,所以可以尝试使用onResume方法替代。在Fragment的onResume方法中执行相同的操作即可。此外,由于onResume和onStart方法只有在父Activity的方法被调用时才会被调用,所以不需要实现其他接口进行回调。

0
0 Comments

当我们想要检查一个Fragment是否可见时,可以使用`Fragment.isVisible()`方法来实现。上面的示例代码展示了如何使用该方法来检查Fragment的可见性。但是,有时我们希望在Fragment变得可见时得到通知。

在`ViewPager`中,相邻的Fragment会被报告为可见。然而,我们并不能直接依赖于`Fragment.isVisible()`方法来判断一个Fragment是否可见。因此,我们需要找到一种方法来检测Fragment何时变得可见。

在这篇[Stack Overflow](http://stackoverflow.com/questions/14731589)上的回答中,有人提出了一个解决方法。他们发现`setUserVisibleHint()`方法会在Fragment变得可见或不可见时被调用。因此,我们可以重写这个方法,并在其中加入我们希望执行的代码。下面是一个示例:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        // Fragment becomes visible
        // Add your code here
    } else {
        // Fragment becomes invisible
    }
}

通过重写`setUserVisibleHint()`方法,我们可以在Fragment变得可见或不可见时得到通知,并在其中执行我们希望执行的代码。这样就解决了我们想要检测Fragment何时变得可见的问题。

0
0 Comments

问题的原因是setUserVisibleHint方法不会自动被调用,而是在ViewPager中使用FragmentPageAdapter时才会调用。对于问题描述的场景,onHiddenChanged(boolean hidden)方法是合适的。根据文档的说明,该方法在Fragment的隐藏状态发生变化时被调用,但在Fragment的初始设置时不会被调用。

解决方法是使用onHiddenChanged(boolean hidden)方法,该方法在Fragment的隐藏状态发生变化时被调用。在ViewPager中使用FragmentPageAdapter时,该方法会被自动调用。

另外,可以使用setUserVisibleHint(boolean isVisibleToUser)方法。当isVisibleToUser参数设置为true时,表示Fragment应该显示。该方法在Fragment变为可见时被调用,我在ViewPager中使用了这个方法。

参考链接:stackoverflow.com/questions/14731589

问题的原因是setUserVisibleHint方法不会自动被调用,解决方法是使用onHiddenChanged(boolean hidden)方法或者setUserVisibleHint(boolean isVisibleToUser)方法来检测Fragment的可见状态。在ViewPager中使用FragmentPageAdapter时,这些方法会被自动调用。

0