需要从寻呼机适配器识别当前视图片段
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 接口时崩溃