我正在尝试编写一个简单的媒体播放器,其中包含歌曲列表和带有默认控制器的播放器页面。
我创建了一个自定义的Song类,一个自定义的适配器,一个托管带有Fragment的recyclerView列表的片段的MainActivity和一个托管播放器Fragment的PlayerActivity,您可以在按下列表项后找到歌曲和其他详细信息。 我设法将数据从recyclerView传递到详细信息Fragment,并且可以正常工作。它会播放正确的歌曲,并带有标题,作者和适当的背景图片。 现在,我想实现一个“下一个/上一个”按钮,该按钮可以使我看到同一片段中的下一首歌曲,但我确实找不到解决方法。 < / p>
我尝试了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 cant find element via indexOf()
我必须重写对象自定义类中的equals方法,然后indexOf方法返回正确的值。