我一直在关注这个教程:关于如何使用fragmentstatepageradapters的https://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html。它工作得很好,但我似乎无法使用ArrayListFragment的实例号。在本教程中,有一段代码将实例编号显示为标题:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_pager_list, container, false);
View tv = v.findViewById(R.id.text);
((TextView)tv).setText("Fragment #" + mNum);
...当我启动应用程序时,第一个屏幕显示片段0。当我滑动到下一个屏幕时,它会显示片段1,依此类推。但是当我添加这个的时候:
Log.i("instancenumber", Integer.toString(mNum));
就在((TextView)tv)...下方,日志显示
instancenumber 0
instancenumber 1
就在我启动应用程序的时候,我甚至还没有触摸任何东西,当我向右滑动时,它会切换到2,当我滑动到最后一个时,它不会记录任何东西,不知何故,向后也不会正确更新。
我猜我既没有正确理解实例数量的概念,也没有正确理解onCreateView方法。如何获取正确的实例编号?它似乎适用于文本视图。
提前谢谢你,
哈切尔
PS: context:我需要这个数字,因为我有一个mp3播放器,我想让它播放得更快(播放速度通过增加实例数来计算),并且当我滑动到下一个屏幕时,我还会显示一个新的图像
发布于 2016-10-08 22:57:01
FragmentStatePagerAdapter总是创建当前视图和下一个视图,所以即使只显示第一个视图,它也会调用onCreateView到第一个视图和下一个视图。
它这样做是为了提高性能,当你滚动到下一个视图时,视图已经创建好了,Android可以正确地显示它。当您滚动到第二个视图时,将调用第三个视图的onCreateView。
您可以使用setOffscreenPageLimit设置PagerAdapter将在内存中保留多少碎片,在此问题中有更多信息:ViewPager FragmentStatePagerAdapter keep more than three fragments in memory
发布于 2016-10-09 22:12:27
在jonathanrz的帮助下,我设法让它像这样工作:
mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
public void onPageSelected(int position) {
Log.i("int", Integer.toString(mPager.getCurrentItem()));
}
});https://stackoverflow.com/questions/39933766
复制相似问题