当前位置: 首页 > 知识库问答 >
问题:

确定当前在ViewPager中可见的片段

刘嘉木
2023-03-14

我使用ViewPager来显示几个片段,在我的FragmentActivity上也有TextView。我需要更改TextView中的文本,这取决于当前在ViewPager中选择的片段。我遇到的问题是:viewpager有一些缓存机制,它在片段对用户真正可见之前对它们进行实例化,例如,当我在viewpager中选择第二个页面时,也创建了第三个页面的片段。更重要的是,我不能确定片断内部是现在可见的片断还是它只是由viewpager创建的,但对用户来说并不是真的可见的。我尝试使用OnPageChangelistener来实现这一目的,但对我来说,对它所做的更改速度太慢(页面滚动,然后我的TextView已经更改)

我实际需要的是:我需要确定当前在ViewPager中可见的片段,不管是从FragmentActivity还是从fragment本身。我怎样才能做到这一点呢?

共有1个答案

尉迟京
2023-03-14

viewpager.onpageChangelistener是这里最明显的方法。正如您所注意到的,onpageselected(int position)在页面居中之前不会被调用(如果您正在通过触摸和按住慢慢滚动页面)。

我实际需要的:我需要确定哪个片段当前在ViewPager中可见,不管是从FragmentActivity还是从fragment本身。我怎样才能做到这一点呢?

首先,您还没有定义“当前可见”。在viewpager中,在两个页面之间滑动时可以同时看到两个页面,那么在滑动过程中,哪一个“当前可见”呢?我的假设是,您会认为“更可见”的页面是“当前可见”的。

话虽如此,我将研究一下使用onPageScrolled(int position,float positionOffset,int positionOffsetPixels)。看来positionoffset可能能够为您提供所需的信息。我会用一些日志记录语句来测试它,看看返回的数据是什么。

 类似资料:
  • 我所拥有的 我不能使用onResume(),因为左边和右边的片段已经创建了。我不能使用setUserVisibilityHint(),因为它是在onCreateView()之前调用的,所以视图还没有准备好。 那么,当某个特定片段对用户可见时,应该采用什么方法来动画视图呢?

  • 下面是我的代码,它有,每个片断类嵌入了上的3个选项卡。我有菜单选项。如所示,通过选择一个选项,我需要更新当前可见的片段。要更新它,我必须调用fragment类中的一个方法。有人能建议一下如何调用那个方法吗? 假设下面是我要调用的具有方法的片段类:

  • 我有一个父ViewPager,我在其中传递了FragmentStatePagerAdapter。现在片段中有另一个子ViewPager在父ViewPager中。因此,当我尝试对父ViewPager的适配器进行notifyDataSetChanged时,将重新创建所有片段,但子ViewPager的当前项位置仍然与重新创建片段的子ViewPager的位置之前相同。 那么,如何重置子viewpager当

  • 我需要执行一个方法,当片段是可见的(对用户)。此方法用于在片段内显示工具提示。 我有一个活动在布局的底部有viewpager和menubar来导航一个片段。而且我还禁用了ViewPager的滑动。 当片段可见或活动时,我需要调用showTooltip()。我试过使用on resume和setUserVisibleHint(),但仍然不起作用。当viewpager移动到可见页时不显示工具提示。

  • 我有FragmentA和FragmentB,当FragmentA变回可见时,我有一个设置活动标题的问题。 流动 null 碎片b