Android 动态添加时在ViewPager中获取当前项

Android 动态添加时在ViewPager中获取当前项,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我有一个片段,其中包含文本视图s和一个自定义计时器视图。有一个带有回调方法的接口,用于Fragment来实现接口的方法,以侦听自定义计时器视图更改,然后更新文本视图s 将侦听器接口附加到自定义计时器视图: @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); mTimerViewPager = (TimerViewPager) ((Activity) get

我有一个
片段
,其中包含
文本视图
s和一个自定义计时器
视图
。有一个带有回调方法的接口,用于
Fragment
来实现接口的方法,以侦听自定义计时器
视图
更改,然后更新
文本视图
s

将侦听器接口附加到自定义计时器
视图

@Override
protected void onAttachedToWindow()
{
    super.onAttachedToWindow();
    mTimerViewPager =
            (TimerViewPager) ((Activity) getContext()).findViewById(R.id.view_page_timer);
    TimerPagerAdapter timerPagerAdapter = mTimerViewPager.getAdapter();
    mListener = (TimerListener) timerPagerAdapter.getFragment(mTimerViewPager.getCurrentItem());
}
在开始时,ViewPager包含一个
片段
,回调将正确更新
TextView
s。但是,当我再添加一个
片段
并返回到第一个片段时,回调将更新第二个片段中的
TextView
s。在添加第三个后,第二个不会更新第三个…所以我不会错过“-1”操作

用于在
TimerPageAdapter
中添加新片段的函数(FragmentStatePagerAdapter的扩展名

  • mCount
    是页数
  • fragments
    SparseArray
我不知道如何获得合适的当前项目。我也不确定
ViewPager
是否是动态添加/删除的好主意(但我还没有找到任何其他替代方法。可能是选项卡?)


我已经提供了我认为必要的代码。如果您需要更多,请在评论中告诉我。

在这种情况下,ViewPager应该可以。ViewPager上有一个获取当前项目的方法

int viewPager.getCurrentItem()

这应该行得通

感谢@NguyễnHoáiNam comment I能够在片段和自定义计时器视图之间实现适当的协作。我使用侦听器的动态设置,而不是
onAttachedToWindow

public void setTimerListener(TimerListener timerListener)
{
    mListener = timerListener;
}

谢谢你的回复。是的,我正在使用它(查看上面第一个代码块的最后一行
mtimerviewpage.getCurrentItem()
)。在我动态添加新片段之前效果很好。如何更新片段?使用带有回调方法的接口
公共类TimerFragment扩展片段实现TimerListener
。方法只使用一个表示自定义视图的参数
public void onTimerChange(Timer Timer)
。所以我从自定义计时器视图中获取值,并在片段内部更新TextView,为什么不从包含它的片段内部更新TextView呢?您在哪里使用自定义计时器view@Nguyễ尼南,我不知道你的意思。我试图从片段内部更新
TextView
s,自定义计时器视图也在片段内部。但是自定义计时器视图仅覆盖
onTouchEvent
方法,并且片段需要侦听更改-因此片段需要是一个侦听器。由于您在其所连接的片段内使用视图,请尝试动态设置侦听器。我不认为在ToWindows中安装侦听器是一种好的做法。此外,尝试实现自定义视图的状态保存以存储您的值。片段将调用其视图以恢复其状态。@NguyễnHoáiNam,谢谢你。我尝试将侦听器的设置移到片段中的函数,而不是将其附加到视图中。这是否有助于从计时器视图更新正确的值?我认为您仍然需要实现视图的状态保存,因此当您的片段重新激活时,如果可以恢复其以前的状态,您的视图状态(最新的计时器值)也将被恢复。@Nguyễ是的,是的。我使用before实现了保存状态,使用
BaseSavedState
public void setTimerListener(TimerListener timerListener)
{
    mListener = timerListener;
}