Я хочу использовать ViewPager
, чтобы пронести по песням в моем Media Player
(движение вперед или назад, как приложение SoundCloud для Android). я создал фрагмент, который я inflate
и установить внутреннюю информацию, как название песни, автор и т.д.ViewPager возвращает неправильный фрагмент
Я прочитал некоторые темы на StackOverflow о ViewPager
отображает неправильные детали (Viewpager shows wrong page и Android Viewpager show wrong pages и многое другое), но я не» t имеет фиксированное число XML
, чтобы использовать его с ViewPager
.
Мои данные отображаются в RecyclerView
, когда я нажав на элемент с индексом 4, например, я называю следующий метод:
mPager.setCurrentItem(position);
Так mPager
установлен в положение 4.
@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
И когда мое приложение запускается, я получаю следующий результат:
I/TEST: Returning a fragment on position 0
I/TEST: Returning a fragment on position 1
Основная проблема, когда я открытие приложения в первый раз и установить песню на позиции 4 информации фрагмента отображается в следующем фрагменте.
Есть ли способ, как я могу это исправить?
адаптер Класс:
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
:
musicList.addOnItemTouchListener(
new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, final int position) {
Log.i("TEST", "Setting the mPager position to: "+position);
mPager.setCurrentItem(position);
}
}
And the `Listener` of the `mPager` where I update the song name for example:
mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
play(position);
ScreenSlidePagerAdapter adapter = (ScreenSlidePagerAdapter) mPager.getAdapter();
adapter.updateSongName(splitName(myDataList.get(position))[0]);
Log.i("TEST", "Playing the position: "+position);
mPagerAdapter.notifyDataSetChanged();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
вы имеете в виду положения четыре является четвёртым фрагментом? Ваш индекс начинается с 0 или 1? –
Моя позиция в массивах и RecyclerView начинается с 0, о позиции viewpager Я думаю, что она начинается с 0. –
Нет, она начинается с 0, просто установите позицию как 3, она должна работать для вас. Сообщите мне, если это проблема. –