需要从寻呼机适配器识别当前视图片段

Posted

技术标签:

【中文标题】需要从寻呼机适配器识别当前视图片段【英文标题】: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())

    

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

【问题讨论】:

给你的片段一个标签并使用该标签来识别片段 根据目的有几种方法可以做到这一点。如果你能说出你为什么要查询活动片段,我可以提供相关的解决方案。 【参考方案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");
    

【讨论】:

以上是关于需要从寻呼机适配器识别当前视图片段的主要内容,如果未能解决你的问题,请参考以下文章

将活动回调发送到片段

使用片段状态寻呼机适配器和 SQLite 数据库中的数据实现 swipe 接口时崩溃

我正在使用融合位置 API 在回收视图适配器中查找当前位置,适配器由片段类使用

如何在回收站视图中的每个项目下方创建寻呼机指示器

从适配器访问片段

需要解释从适配器发送数据到片段