无法获得可见/实时片段

时间:2018-07-30 08:20:06

标签: android android-fragments android-viewpager

我陷入了这个问题。

我想在应用程序上下文中维护 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()

获得此实时片段
    两个片段的
  1. isVisible() true 。 (没用)
  2. 两个片段的
  3. isResumed() true 。 (没用)

1 个答案:

答案 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.
}
});