首页 > 解决方案 > 如何在android中将播放的mp3信息从activity传递到fragment

问题描述

我有一个应用程序可以播放从手机存储中加载的 mp3 文件。所有 mp3 文件的信息都保存在一个数组中。在 Main Activity 上有一个显示正在播放歌曲的简短信息的视图和一个显示正在播放歌曲的详细信息的片段。但我不知道如何将播放歌曲的详细信息传递给片段。这是我的代码添加 listview 和 onclick 事件:

        listView = findViewById(R.id.listSong);
    adapter = new Adapter(MainActivity.this, R.layout.item_song, mp3List);
    listView.setAdapter(adapter);

    mediaPlayer = new MediaPlayer();
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            if (mediaPlayer.isPlaying()){
                mediaPlayer.stop();
                mediaPlayer.release();
            }

            CreateMedia(position);
            mediaPlayer.start();
            btnPlayBottom.setImageResource(R.drawable.button_pause);
            vitri = position;
        }
    });

    btnPlayBottom.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mediaPlayer.isPlaying()){
                mediaPlayer.pause();
                btnPlayBottom.setImageResource(R.drawable.button_play);
            }
            else{
                mediaPlayer.start();
                btnPlayBottom.setImageResource(R.drawable.button_pause);
            }
        }
    });

    btnNextBottom.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            vitri++;
            if (vitri > (mp3List.size() - 1)){
                vitri = 0;
            }

            if (mediaPlayer.isPlaying()){
                mediaPlayer.stop();
                mediaPlayer.release();
            }
            CreateMedia(vitri);
            mediaPlayer.start();
        }
    });

CreateMedia() 函数:

    public void CreateMedia(int i){
    mediaPlayer = MediaPlayer.create(MainActivity.this, Uri.parse(mp3List.get(i).getaPath().toString()));
    txtPlaying.setText(mp3List.get(i).getaName());
    txtAuthor.setText(mp3List.get(i).getaArtist());
}

AddFragment() 函数:

    public void AddFragment(View view){
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    Fragment fragment = null;
    int container = 0;

    switch (view.getId()) {
        case R.id.layoutClose:
            fragment = new FragmentClose();
            container = R.id.frameContent;
            break;
        case R.id.layoutList:
            fragment = new FragmentPlaylist();
            container = R.id.frameContent;
            break;
        case R.id.bottomPlayerTouchable:
            fragment = new FragmentPlayer();
            container = R.id.mainFrame;
            break;
    }

    fragmentTransaction.add(container, fragment);
    fragmentTransaction.addToBackStack("fragment");
    fragmentTransaction.commit();
}

frameContent 是屏幕的一部分,mainFrame 是全屏。

这是主屏幕

这是播放歌曲的详细信息片段

请帮忙!!

标签: androidandroid-fragments

解决方案


您可以在各自的片段中创建公共 setter 函数。如果您必须传递任何信息,则从活动中使用片段对象来传递此信息。如下所示:

FragmentA extends Fragment {
 String playingMP = "";
 public void currentMPThree(String mpThree) {
  this.playingMP = mpThree;
 }
}

根据您的活动:

FragmentA fragmenta = new FragmentA();
fragmentA.currentMPThree(currentString);

推荐阅读