动态添加时在 ViewPager 中获取当前项目
Getting current item in ViewPager when adding dynamically
我有一个 Fragment
,其中包含 TextView
和一个 自定义计时器 View
。有一个带有回调方法的接口,用于 Fragment
实现接口的方法来监听 自定义定时器 View
变化,然后更新 TextView
s。
正在将侦听器接口附加到 自定义计时器 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
s。但是当我再添加一个 Fragment
并返回到第一个时,回调会在第二个中更新 TextView
s。添加第三个后,第二个 not 更新第三个...所以我并没有遗漏“-1”操作。
在 TimerPagerAdapter
中添加新片段的函数(FragmentStatePagerAdapter
的扩展):
public int addPage(Fragment fragment)
{
int position = mCount;
mCount++;
fragments.put(position, fragment);
notifyDataSetChanged();
return position;
}
mCount
是页数。
fragments
是 SparseArray<Fragment>
我不知道如何获得合适的当前项目。我也不确定 ViewPager
是否是动态 adding/removing 的好主意(但我还没有找到任何其他选择。可能是标签?)
我已经提供了我认为必要的代码。如果您需要更多,请在评论中告诉我。
ViewPager 在这种情况下应该没问题。 ViewPager 上有一个获取当前项目的方法。
int viewPager.getCurrentItem()
Docs here. 应该可以。
感谢@NguyễnHoàiNam 的评论,我能够在片段和自定义计时器视图之间实现适当的协作。而不是 onAttachedToWindow
我使用监听器的动态设置:
public void setTimerListener(TimerListener timerListener)
{
mListener = timerListener;
}
我有一个 Fragment
,其中包含 TextView
和一个 自定义计时器 View
。有一个带有回调方法的接口,用于 Fragment
实现接口的方法来监听 自定义定时器 View
变化,然后更新 TextView
s。
正在将侦听器接口附加到 自定义计时器 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
s。但是当我再添加一个 Fragment
并返回到第一个时,回调会在第二个中更新 TextView
s。添加第三个后,第二个 not 更新第三个...所以我并没有遗漏“-1”操作。
在 TimerPagerAdapter
中添加新片段的函数(FragmentStatePagerAdapter
的扩展):
public int addPage(Fragment fragment)
{
int position = mCount;
mCount++;
fragments.put(position, fragment);
notifyDataSetChanged();
return position;
}
mCount
是页数。fragments
是SparseArray<Fragment>
我不知道如何获得合适的当前项目。我也不确定 ViewPager
是否是动态 adding/removing 的好主意(但我还没有找到任何其他选择。可能是标签?)
我已经提供了我认为必要的代码。如果您需要更多,请在评论中告诉我。
ViewPager 在这种情况下应该没问题。 ViewPager 上有一个获取当前项目的方法。
int viewPager.getCurrentItem()
Docs here. 应该可以。
感谢@NguyễnHoàiNam 的评论,我能够在片段和自定义计时器视图之间实现适当的协作。而不是 onAttachedToWindow
我使用监听器的动态设置:
public void setTimerListener(TimerListener timerListener)
{
mListener = timerListener;
}