ViewPager返回错误的片段

时间:2016-02-23 09:07:48

标签: android

我想使用ViewPager来浏览我的Media Player中的歌曲(像Android的SoundCloud应用程序一样前进或后退)。 我创建了一个片段,我inflate并设置内部信息,如歌曲名称,作者等。

我已经在StackOverflow上阅读了有关ViewPager显示错误项目Viewpager shows wrong pageAndroid Viewpager show wrong pages以及更多内容的一些主题,但我没有固定数量的{{ 1}}用于XML

我的数据显示在ViewPager,当我按下索引4上的项目时,例如我调用以下方法:

RecyclerView

因此 mPager.setCurrentItem(position); 设置为位置4。

mPager

但在 @Override public Fragment getItem(int position) { Log.i("TEST","Returnin a fragment on position "+position); return fragment = new MusicSliderFragment(); } 发生变化时,我会得到以下输出:

Adapter

当我的应用程序启动时,我得到以下输出:

02-23 10:39:57.131 7599-7599/************** I/TEST: Returning a fragment on position 4
02-23 10:39:57.131 7599-7599/************** I/TEST: Returning a fragment on position 3
02-23 10:39:57.131 7599-7599/************** I/TEST: Returning a fragment on position 5

主要问题是当我第一次打开应用程序并将歌曲设置在位置4时,片段信息会显示在下一个片段中。

有什么方法可以解决这个问题?

适配器类:

I/TEST: Returning a fragment on position 0
I/TEST: Returning a fragment on position 1

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { private MusicSliderFragment fragment; public ScreenSlidePagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { Log.i("TEST","Returnin a fragment on position "+position); return fragment = new MusicSliderFragment(); } @Override public int getCount() { return NUM_PAGES; } public void updateSongName(String name) { fragment.setSongName(name); } } RecyclerView

Listener

2 个答案:

答案 0 :(得分:2)

查看寻呼机可以在您选择当前时加载邻居片段。方法setOffscreenPageLimit()定义要预加载的邻居数。 onPageSelected(int position)应该正常工作并返回当前项。

答案 1 :(得分:0)

如果要加载第四个片段,则需要设置位置3,Viewpager索引从零开始。

  mPager.setCurrentItem(3); //Load the 4th fragment according to you.(0-3)