gpt4 book ai didi

android - 如何检查 SectionsPagerAdapter 选项卡是否可见

转载 作者:行者123 更新时间:2023-11-29 21:10:14 24 4
gpt4 key购买 nike

我有一个在嵌入式系统上运行的应用程序,在 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 是否在附加到您的 ViewPagerOnPageListener 中被选中。在监听器中,您可以检查是否选择了要更新计时器的页面。这是一个例子:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com