我如何将歌曲索引发送到自定义音乐播放器?

时间:2016-03-25 20:38:26

标签: android listview android-fragments arraylist

所以我对Android编程很新,并想知道如何将一个歌曲的索引从图书馆Fragment发送到播放器Fragment,然后使用该索引自动播放歌曲。到目前为止,使用我的代码,单击ListItem时没有任何反应。我的意思是什么。它甚至没有按预期发生在我身上。这是代码......

LibraryFragment

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_library, container, false);

    songView = (ListView)rootView.findViewById(R.id.song_list);
    songList = new ArrayList<>();

    getSongList();

    Collections.sort(songList, new Comparator<Song>() {
        public int compare(Song a, Song b) {
            return a.getTitle().compareTo(b.getTitle());
        }
    });

    songView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            // Getting list item index
            int songIndex = position;

            // Starting new intent
            Intent in = new Intent(getActivity().getApplicationContext(), LibraryFragment.class);
            // Sending songIndex to Player Fragment
            in.putExtra("songIndex", songIndex);
            getActivity().setResult(100, in);

        }
    });

    SongAdapter songAdt = new SongAdapter(getActivity(), songList);
    songView.setAdapter(songAdt);

    return rootView;
}

PlayerFragment

@Override
public void onActivityResult(int requestCode,
                                int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == 100){
        currentSongIndex = data.getExtras().getInt("songIndex");
        playSong(currentSongIndex);
    }

}

任何帮助都将非常感谢!干杯!

1 个答案:

答案 0 :(得分:0)

您不能对片段使用Intents,它们无法启动。

您还认为getActivity().setResult(100, in);的作用是什么?你肯定使用了那个错误。

请阅读有关片段通信的official documentation

详细

  • 您的LibraryFragment需要定义一个界面,例如

public interface LibraryListener { void onIndexSelected(int index) }

  • 您的活动必须实现此界面。在这个实现中,它必须将索引传递给PlayerFragment,它应该定义一个公共方法来做到这一点。

  • 现在,您的LibraryFragment可以拨打((LibraryListener)getActivity()).onIndexSelected(index);