Dav*_* S. 72 user-interface android android-fragments android-viewpager
我有一个ViewPager,每个页面都是一个Fragment视图.我想测试一个片段是否在可见区域.Fragment.isVisible只测试
ViewPager将创建3个(默认情况下)片段,并且所有三个片段都符合上述条件,但只有一个实际上对用户可见(人眼)
mir*_*ign 67
这是我用来确定片段可见性的方法.
private static boolean m_iAmVisible;
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
m_iAmVisible = isVisibleToUser;
if (m_iAmVisible) {
Log.d(localTAG, "this fragment is now visible");
} else {
Log.d(localTAG, "this fragment is now invisible");
}
}
Run Code Online (Sandbox Code Playgroud)
hcp*_*cpl 19
你是对的有更好的方法来做到这一点!
在线查看FragmentPagerAdapter javadoc,你会看到有一个方法setPrimaryItem(ViewGroup容器,int位置,Object对象):void正是你所需要的.
来自javadoc
public void setPrimaryItem(ViewGroup container,int position,Object object)
被调用以通知适配器当前被认为是"主要"的项目,即向用户显示为当前页面的那个项目.
参数container包含要从中删除页面的View.position现在是主要的页面位置.object由instantiateItem(View,int)返回的同一对象.
滚动状态的注意事项
现在,如果你实现这个并开始调试以了解何时调用它,你会很快注意到在准备片段和用户滑动时会多次触发.
因此,附加一个ViewPager.OnPageChangeListener并且只有在viewpagers滚动状态再次变为SCOLL_STATE_IDLE时才执行必须执行的操作可能是个好主意.
出于我的目的,它可以ViewPager.OnPageChangeListener.onPageSelected()与Fragment.onActivityCreated()Fragment可见时一起使用来执行操作.Fragment.getUserVisibleHint()也有帮助.
| 归档时间: |
|
| 查看次数: |
57056 次 |
| 最近记录: |