android - 如何在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 是全屏。
请帮忙!!
解决方案
您可以在各自的片段中创建公共 setter 函数。如果您必须传递任何信息,则从活动中使用片段对象来传递此信息。如下所示:
FragmentA extends Fragment {
String playingMP = "";
public void currentMPThree(String mpThree) {
this.playingMP = mpThree;
}
}
根据您的活动:
FragmentA fragmenta = new FragmentA();
fragmentA.currentMPThree(currentString);
推荐阅读
- angular - 为什么 instanceof Observable 在我的测试中返回 false?
- django - 自定义管理视图中的面包屑 (Django)
- azure - 具有对象 ID 的客户端无权在范围内执行操作“Microsoft.Web/serverfarms/read”
- java - Java Jackson XMLMapper 序列化地图
没有将 XML < 和 > 字符转义为 &lgt; 的对象 >? - ios - 实体“GAIHit”上的 GoogleAnalytics.Property“参数”正在使用 nil 或不安全的 NSValueTransformer
- python - 使用 Python 从 API 访问数据(疑问)
- php - 在 laravel 5.8 中上传图片
- javascript - 测试 package.json types 属性是否适用于相应的 javascript 文件
- git - 更新一个 git 提交
- java - Java Streams - 使用 GroupingBy 和计数收集到地图,但如果特定字段为 Null,则计数为 0