- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个在嵌入式系统上运行的应用程序,在 SectionsPagerAdapter 中有 4 个选项卡,在每个选项卡的 fragment 中,我有代码通过计时器每 0.5 秒更新一次显示。
我发现当我创建 4 个选项卡时,前 2 个被创建,只有当我滚动到预期的右侧时才会创建 3 和 4。
我的问题是,在创建每个选项卡的 View 并启动计时器后,即使选项卡不可见,计时器也会触发并处理更新 View 的调用。
我正在尝试找到一种方法来了解选项卡是否可见以及是否隐藏,我只是跳过重新绘制 View 。只有当选项卡可见时,我才会进行更新。
我尝试从 getView() 返回的 View 中使用 isShown() 和 hasWindowFocus(),但它们总是返回 true;
我还尝试对每个 fragment 使用 onPause 和 onResume,但只有当我从它移至第二个选项卡时它们才会被调用。例如,在 tab1 上,移动到 tab2,未调用,移动到 tab3,调用 onPause()。
现在我已经使用 onTabSelected() 将当前选项卡存储在我的单例类中,所有 fragment 都可以从中访问系统数据。当我创建 fragment 时,我传入制表符位置。
但是,如何以更优雅的方式检查此 View 是否可见?
最佳答案
您可以检查您要更新的 Fragment
是否在附加到您的 ViewPager
的 OnPageListener
中被选中。在监听器中,您可以检查是否选择了要更新计时器的页面。这是一个例子:
SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int page) {
/*If the page is the page you want to update your timer on, enable it.*/
if ( page == myTimerPageId ){
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment timerFragment = fragmentManager.findFragmentByTag("android:switcher:" + mViewPager.getId() + ":" + myTimerPageId);
timerFragment.startTimer();
}
/*If it is not the page you update your timer on, disable it.*/
else{
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment timerFragment = fragmentManager.findFragmentByTag("android:switcher:" + mViewPager.getId() + ":" + myTimerPageId);
timerFragment.stopTimer();
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {}
@Override
public void onPageScrollStateChanged(int arg0) {}
});
您必须通过 FragmentManager 获取 Fragment,然后对该 Fragment
执行任何操作,实现 startTimer()
或其他操作。 myTimerPageId
必须是您递增计时器的页面的标识符。 findFragmentByTag
部分是从 this answer 中窃取的. OnPageChangeListener
部分是从 here 中获取的.
作为旁注,ViewPager
有一个 setOffscreenPageLimit
设置在内存中保留的 Activity 页面旁边的页面数。不过,这可以是最小值 1,因此不可能将它与 Fragment.onPause
一起使用来实现此处要求的内容。如果这在其他情况下有用,请查看 here .
关于android - 如何检查 SectionsPagerAdapter 选项卡是否可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23148008/
我有一个在嵌入式系统上运行的应用程序,在 SectionsPagerAdapter 中有 4 个选项卡,在每个选项卡的 fragment 中,我有代码通过计时器每 0.5 秒更新一次显示。 我发现当我
我有一个 sectionsPagerAdapter 用作 ViewPager 的适配器。 mSectionsPagerAdapter = new SectionsPagerAdapter(
我正在尝试使用 Switch 方法引用特定 fragment ,当引用特定 fragment 时,IDE (Eclipse) 会抛出错误。 具体错误是:类型不匹配:无法从 GuidelineFragm
关闭。这个问题需要 details or clarity 。它目前不接受答案。 想改进这个问题吗? 添加细节并通过 editing this post 澄清问题。 关闭 9 年前。 Improve
我是一名优秀的程序员,十分优秀!