Перейти к следующему элементу в подробном представлении фрагмента, взятого из обзора переработчика - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь написать простой медиаплеер со списком песен и страницей плеера с контроллером по умолчанию.

Я создал пользовательский класс 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 возвращает правильное значение.

...