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

时间:2015-09-02 11:06:40

标签: android android-fragments android-viewpager

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

enter image description here

将侦听器接口附加到自定义计时器 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和回调更新TextView。但是,当我再添加一个Fragment并返回第一个时,回调会在第二个中更新TextView。添加第三个后,第二个更新第三个...所以它不像我缺少“-1”操作。

TimerPagerAdapterFragmentStatePagerAdapter的扩展名)中添加新片段的功能:

public int addPage(Fragment fragment)
{
    int position = mCount;
    mCount++;
    fragments.put(position, fragment);
    notifyDataSetChanged();
    return position;
}
  • mCount是页数。
  • fragmentsSparseArray<Fragment>

我不知道如何获得适当的当前项目。我也不确定ViewPager是否是动态添加/删除的好主意(但我没有找到任何其他替代方案。标签可能?)

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

2 个答案:

答案 0 :(得分:0)

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

int viewPager.getCurrentItem()

Docs here.这应该有效。

答案 1 :(得分:0)

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

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