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

Getting current item in ViewPager when adding dynamically

我有一个 Fragment,其中包含 TextView 和一个 自定义计时器 View。有一个带有回调方法的接口,用于 Fragment 实现接口的方法来监听 自定义定时器 View 变化,然后更新 TextViews。

正在将侦听器接口附加到 自定义计时器 View:

@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 包含一个 Fragment 和回调正确更新 TextViews。但是当我再添加一个 Fragment 并返回到第一个时,回调会在第二个中更新 TextViews。添加第三个后,第二个 not 更新第三个...所以我并没有遗漏“-1”操作。

TimerPagerAdapter 中添加新片段的函数(FragmentStatePagerAdapter 的扩展):

public int addPage(Fragment fragment)
{
    int position = mCount;
    mCount++;
    fragments.put(position, fragment);
    notifyDataSetChanged();
    return position;
}

我不知道如何获得合适的当前项目。我也不确定 ViewPager 是否是动态 adding/removing 的好主意(但我还没有找到任何其他选择。可能是标签?)

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

ViewPager 在这种情况下应该没问题。 ViewPager 上有一个获取当前项目的方法。

int viewPager.getCurrentItem()

Docs here. 应该可以。

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

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