【问题标题】:How to know when fragment actually visible in viewpager如何知道片段何时在 viewpager 中实际可见
【发布时间】:2018-07-31 06:32:59
【问题描述】:

我在 ViewPager 中使用了 4 个片段,因为 ViewPager 会提前加载上一个和下一个片段,并且在片段之间导航时不会调用生命周期方法。 那么有什么方法可以检测 Fragment 何时真正可见。 提前致谢。

【问题讨论】:

标签: android android-viewpager fragment


【解决方案1】:

根据@Matt 的回答 setUserVisibleHint 已弃用

所以这是另一种方法。

    @Override
    public void setMenuVisibility(boolean isvisible) {
        super.setMenuVisibility(isvisible);
        if (isvisible){
            Log.d("Viewpager", "fragment is visible ");
        }else {
            Log.d("Viewpager", "fragment is not visible ");
        }
    }

【讨论】:

  • @JohnGlen 您遇到过哪个问题?
  • 我认为如果 Fragment 可见,则意味着它已在屏幕上呈现。那是我的误解。
  • @JohnGlen 好的,那么你需要恢复你的反对票
  • 我试过了,但在编辑答案之前它不会让我。
  • 它不适用于 Fragment
【解决方案2】:

当然。假设 viewPager 是您的 ViewPager 实例,请使用:viewPager.getCurrentItem()

在您的Fragment 中,您可以检查其实例是否对用户可见,如下所示:

@Override
public void setUserVisibleHint(boolean visible) {
    super.setUserVisibleHint(visible);
    if (visible) {
        Log.i("Tag", "Reload fragment");
    }
}

在提出问题之前,请务必彻底搜索答案。例如,您应该首先检查的位置是:https://developer.android.com/reference/android/support/v4/view/ViewPager.html

【讨论】:

  • 谢谢马特。实际上我想在 Fragment 可见时更新一些视图,所以只需寻找每次用户可见 Fragment 时调用的任何回调方法
  • 您可以创建自己的回调,例如,从您的每个Fragment 实例的setUserVisibleHint 中调用viewPager 的方法。如果你想更新同一个视图,那么这个方法本身就是你的答案。只需将 Log.i() 替换为每次片段可见时要运行的代码即可。
  • 非常小心:“这个方法可能在片段生命周期之外被调用”
  • 它只适用于 FragmentPagerAdapter !!!它不好
【解决方案3】:

您可以使用viewPager.getCurrrentItem() 来获取当前选择的索引,并且您应该能够推断出显示的是哪个片段。但是,您可能想要的是使用addOnPageChangeListener() 添加OnPageChangeListener。这将让您跟踪选择的页面,因为它是通过实现 onPageSelected(int selected) 方法选择的。

【讨论】:

    【解决方案4】:

    你试过片段中的isVisible方法吗?

    【讨论】:

    • ViewPaget2 isVisible 有助于避免当它不是当前片段时的额外调用。
    • 如果您需要在 Fragment 可见时立即执行操作,则此方法不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2017-09-15
    相关资源
    最近更新 更多