【问题标题】:Detect when fragment becomes visible [duplicate]检测片段何时可​​见[重复]
【发布时间】:2014-02-12 16:12:17
【问题描述】:

为什么不重复:建议的帖子仅适用于 viewpager,或者当调用 onResume 时。

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

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

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

【问题讨论】:

  • 有什么特别的原因需要使用隐藏和显示吗?我会使用 Fragment Transactions 并检查堆栈计数,例如如果为 1,则表示您的详细信息片段可见,如果不可见,则 listfragment 可见。
  • 为什么你更喜欢使用 hide() 和 show() 而不是片段事务和回栈?按照指南完成您需要的工作可能会更容易......
  • @Elenasys 这适用于可以使用 setuservisiblehint 的 viewpager
  • onHiddenChanged() 是否会为您的片段触发?
  • 如果你能提供一些关于如何使用来检测我的片段是否再次可见的信息,那就太棒了。我会检查它是否被称为 asop,但我觉得这可能有效!

标签: android android-fragments


【解决方案1】:

编辑:
正如 cmets 中所指出的,setUserVisbileHint() 不会被自动调用,而是在 ViewPager 中使用时由 FragmentPageAdapter 调用。

对于问题中描述的场景,onHiddenChanged(boolean hidden)http://developer.android.com/reference/android/app/Fragment.html#onHiddenChanged(boolean)是合适的。
如文档中所述,每次片段隐藏状态更改时都会调用该方法,但不会在片段的初始设置时调用。


你可以使用setUserVisibleHint()http://developer.android.com/reference/android/support/v4/app/Fragment.html#setUserVisibleHint(boolean)

如果isVisibleToUser设置为true,则应该显示片段。

【讨论】:

  • 一旦 Fragment 可见,就会调用此方法。我在 ViewPager 中使用它。
  • stackoverflow.com/questions/14731589/… - “问题的答案很清楚:你手动调用它,FragmentPagerAdapter 也手动调用它”
  • 好的,谢谢,不知道 FragmentPagerAdapter 调用它。学到了一些东西。
【解决方案2】:

了解方法:Fragment. isVisible()

例子:

MyFragmentClass test = (MyFragmentClass) getSupportFragmentManager().findFragmentById("myFragnmentID");
if (test != null && test.isVisible()) {
     //VISIBLE! =)
}
else {
    //NOT VISIBLE =(
}

【讨论】:

【解决方案3】:

您可以在片段启动时向您的活动发送一个事件: https://www.inkling.com/read/programming-android-mednieks-1st/chapter-11/visualizing-the-fragment-life

通过重写 onStart 方法:

@Override
public void onStart() {
    super.onStart();
    ((MyInterface)getActivity()).onFragmentIsVisible( this );
}

MyInterface是一个接口:

public MyInterface {
   public void onFragmentVisible( Fragment fragment );
}

您的活动将不得不实施它。

使用像

这样的事件总线库可能会更容易

【讨论】:

  • 我会试试你的代码,但请注意,当片段再次可见时不会调用 onStart
  • 你试过onResume吗?
  • onRsume() & onStart() 只有在调用父activity方法的时候才会在fragment中调用,所以不需要实现其他接口回调。
猜你喜欢
  • 1970-01-01
  • 2015-12-07
  • 2011-10-21
  • 2017-02-23
  • 2021-01-21
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多