Я пытаюсь написать простой медиаплеер со списком песен и страницей плеера с контроллером по умолчанию.
Я создал пользовательский класс Song, пользовательский адаптер, MainActivity, в котором размещен фрагмент, с перечнем песен в recyclerView, и PlayerActivity, в котором размещен фрагмент проигрывателя, где вы можете найти песню и другие подробности после нажатия на элемент списка.
Мне удалось передать данные из recyclerView в фрагмент данных с намерением, и это работает. Он воспроизводит правильную песню с названием, автором и соответствующим фоновым изображением.
Теперь, Я хотел бы реализовать кнопку «следующий / предыдущий», которая позволяет мне визуализировать следующую песню в том же фрагменте, но я действительно не могу найти способ сделать это.
Я пробовал метод IndexOf (), потому что я думаю, что мне нужно получить позицию элемента в ArrayList. Я создал сообщение Toast для отображения позиции элемента, но оно всегда возвращает значение «1».
Я также решил реализовать ViewPager, но мне не нужно перемещаться между различными фрагментами, я просто хочу, чтобы один и тот же фрагмент отображал другие данные.
Кто-нибудь может мне помочь? Это часть моего кода:
//from ListFragment. This is where I send the data to the player:
...
@Override
public void onListItemClick(View view, int clickedItemIndex) {
Intent playerIntent = new Intent(getActivity(), PlayerActivity.class);
playerIntent.putExtra("StoryItem", mStoryList.get(clickedItemIndex));
playerIntent.putParcelableArrayListExtra("StoryList", mStoryList);
startActivity(playerIntent);
}
//from PlayerFragment. This is where I retrieve data from the list:
...
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle
savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//create an AudioManager object in order to manage AudioFocus
mAudioManager = (AudioManager)
getActivity().getSystemService(AUDIO_SERVICE);
//retrieve data from the clicked list item in MainActivity
Bundle data = getActivity().getIntent().getExtras();
if (data != null) {
ArrayList storyList =
getActivity().getIntent().getExtras().getParcelableArrayList("StoryList");
Story story = data.getParcelable("StoryItem");
if (story != null && storyList != null) {
backgroundImage = story.getBackgroundResId();
title = story.getTitleResId();
audio = story.getAudioResId();
getActivity().setTitle(title);
Toast toast = Toast.makeText(getActivity(), "Item pos: "+
storyList.indexOf(story), Toast.LENGTH_LONG);
toast.show();
}
}
РЕДАКТИРОВАТЬ: я нашел ответ здесь: JAVA ArrayList не может найти элемент с помощью indexOf ()
Мне пришлось переопределить метод equals в пользовательском классе объекта, затем метод indexOf возвращает правильное значение.