【问题标题】:Need to identify current view fragment from pager adapter需要从寻呼机适配器识别当前视图片段
【发布时间】:2017-05-18 05:50:40
【问题描述】:

我们必须知道当前fragment是pager adapter中的可见模式,但无法处理。

for (Fragment fragment : getChildFragmentManager().getFragments()) {
    if (fragment instanceof OffLineSyncedFragment && fragment.isVisible() && fragment.isVisible()) {
        ((OffLineSyncedFragment) fragment).confirmDeleteAlert(getActivity(), documentHelper, false, isDocument, null);
    }
    else if(fragment instanceof OffLineFailedFragment && fragment.isVisible()){

    }
}

这是我的代码,它不起作用。

【问题讨论】:

  • 给你的片段一个标签并使用该标签来识别片段
  • 根据目的有几种方法可以做到这一点。如果你能说出你为什么要查询活动片段,我可以提供相关的解决方案。

标签: android android-fragments adapter pager


【解决方案1】:

ViewPager.OnPageChangeListener 是这里的正确方法。正如您所注意到的,在页面居中之前不会调用onPageSelected(int position)。因此,当页面正确居中时,它将为您提供当前可见的片段。,

【讨论】:

  • 你真的认为 onPageSelected 在这种情况下有效吗?
  • 是的,当页面被更改以获取可见的当前片段时,它可以正常工作。
  • 请试一试,当且仅当存在片段列表时,您的方法才有效。在一般情况下,您的方法将在该位置返回相同片段的新实例,这对于任何更新几乎无用。
  • 是的,你是对的,只有当他有一个可以定义的片段列表时它才会起作用。
  • 我通常不喜欢有片段列表。它会产生不必要的内存开销
【解决方案2】:

有一些方法可以做到这一点。首先,您可以简单直接地在视图寻呼机上设置页面更改侦听器:

  viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(final int i, final float v, final int i2) {
    }
    @Override
    public void onPageSelected(final int i) {
        // If you are user FragmentPagerAdapter below is the right way to get fragment
        Fragment fragment= getChildFragmentManager().findFragmentByTag("android:switcher:" + R.id.viewPager_card_exchanger + ":" + i);

        if(fragment!=null){
            // Do your stuff here 
        }
    }
    @Override
    public void onPageScrollStateChanged(final int i) {
    }
});

或者你可以重写片段方法如下:

 @Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        System.out.println("VISIBLE");
    } else {
        System.out.println("GONE");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    相关资源
    最近更新 更多