我陷入了这个问题。
我想在应用程序上下文中维护 Fragment的实时实例。我所做的是
public class BaseProjectFragmentParent extends BaseProjectFragment {
@Override
public void onResume() {
super.onResume();
App.getInstance().setLiveFragment(this);
}
@Override
public void onPause() {
super.onPause();
App.getInstance().setLiveFragment(null);
}
}
,我通过这个基类扩展了所有片段。我希望在应用程序类中可以找到活动实例。
问题在ViewPager
中,我在Fragment
中有两个ViewPager
,其中两个Fragment的onResume()
都被调用,而活动实例被设置为第二个分段。我正在编写一些通用代码,所以不想使用getCurrentItem()
。
接下来,我尝试通过 getSupportFragmentManager().getFragments()
isVisible()
为 true
。 (没用)isResumed()
为 true
。 (没用)答案 0 :(得分:1)
您可以使用
setUserVisibleHint(boolean isVisibleToUser)
在片段中。片段可见时,操作系统会设置此标志:
class MyFragment extends Fragment {
public MyFragment() {
setUserVisibleHint(false) //This is needed because by default its true
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser)
//true if fragment is visible
}
}
但是,这不会在Viewpager内部调用。您必须在viewpager中添加一个侦听器,然后手动设置活动页面:
viewPager.addOnPageChangeListener(new OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
public void onPageSelected(int position) {
// Check if this is the page you want.
}
});