[英]How to pass raw mp3 from recyclerview item to another activity
在我的 Android 应用程序中,我有一个包含项目列表的 recyclerview。 在 recyclerview 活动中,每个项目都有一个 textview,另一个活动有两个 textview 和一个音频播放按钮。 但音频没有播放。 如何设置 setOnClickListener 并使用 MediaPlayer 播放音频 mp3。 这是我的代码-
名称模型.java
public class NameModel {
private String name,meaning;
private int audio;
public NameModel(String name, String meaning, int audio) {
this.name= name;
this.meaning= meaning;
this.audio= audio;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name= name;
}
public String getMeaning() {
return meaning;
}
public void setMeaning(String meaning) {
this.meaning= meaning;
}
public int getAudio() {
return audio;
}
public void setAudio(int audio) {
this.audio = audio;
}
}
名称适配器.java
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position=getAdapterPosition();
NameModel nameModel=nameItemList.get(position);
Intent intent=new Intent(context, NameDetailsActivity.class);
intent.putExtra("NAME",nameModel.getName());
intent.putExtra("MEANING",nameModel.getMeaning());
intent.putExtra("AUDIO", nameModel.getAudio());
context.startActivity(intent);
}
});
主活动.java
public class MainActivity extends AppCompatActivity {
private LinearLayoutManager linearLayoutManager;
private List<NameModel> nameModelList;
private NameAdapter nameAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerViewId);
nameModelList = new ArrayList<>();
nameAdapter = new NameAdapter(this,nameModelList);
linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setAdapter(nameAdapter);
recyclerView.setLayoutManager(linearLayoutManager);
RecyclerView.ItemDecoration itemDecoration=new DividerItemDecoration(getApplicationContext(),DividerItemDecoration.VERTICAL);
recyclerView.addItemDecoration(itemDecoration);
nameModelList.add(new NameModel("Mahmud", "The praised one", R.raw.mahmud));
nameModelList.add(new NameModel("Maaz", "Brave Man", R.raw.maaz));
}
}
名称详细信息Activity.java
public class NameDetailsActivity extends AppCompatActivity {
Context context;
NameModel nameModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details_name);
String name = getIntent().getStringExtra("NAME");
String meaning = getIntent().getStringExtra("MEANING");
int audio = getIntent().getIntExtra("AUDIO",0);
TextView nameText = (TextView) findViewById(R.id.tvName);
TextView meaningText = (TextView) findViewById(R.id.tvMeaning);
Button playbutton = (Button) findViewById(R.id.playBtn);
nameText.setText(name);
meaningText.setText(meaning);
playbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MediaPlayer mediaPlayer = MediaPlayer.create(context,audio);
mediaPlayer.start();
}
});
}
}
任何帮助,将不胜感激。 谢谢!
首先你在做getIntent().getStringExtra("AUDIO");
在这种情况下这是不对的。 你在你的intent.putExtra("AUDIO", nameModel.getAudio());
设置了 int 值intent.putExtra("AUDIO", nameModel.getAudio());
所以你必须使用int audio = getIntent().getIntExtra("AUDIO");
取回 int 值int audio = getIntent().getIntExtra("AUDIO");
. 希望它会帮助你。
另外我注意到一件事。 在您的 NameDetailsActivity 中,您在哪里初始化您的上下文和您的 NameModel 类? 其实我不知道为什么你需要NameModel
类NameDetailsActivity
,但无论如何...如果你将通过这方面给媒体播放器不用初始化,您将获得NullPointerException异常。 你会得到类似Caused by java.lang.NullPointerException Attempt to invoke virtual method 'int com.tahmid.name.models.NameModel.getAudioFile()'
异常。 这是因为你的NameModel
类NameDetailsActivity
为空。
你必须做两件事。 如果您需要NameModel
类NameDetailsActivity
,你必须创建一个空的构造NameModel
类。 你可以在我下面的回答中找到它。 并且您必须在NameDetailsActivity
初始化 context 和NameDetailsActivity
。
所以试试这个代码。
首先在你的NameModel
创建一个空的构造函数。
public class NameModel {
private String name,meaning;
private int audio;
public NameModel() {}
public NameModel(String name, String meaning, int audio) {
this.name= name;
this.meaning= meaning;
this.audio= audio;
}
// The same code...
而你的NameDetailsActivity
你可以做到这一点。
public class NameDetailsActivity extends AppCompatActivity {
Context context;
NameModel nameModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details_name);
context = getContext();
nameModel = new NameModel();
String name = getIntent().getStringExtra("NAME");
String meaning = getIntent().getStringExtra("MEANING");
int audio = getIntent().getIntExtra("AUDIO",0);
TextView nameText = (TextView) findViewById(R.id.tvName);
TextView meaningText = (TextView) findViewById(R.id.tvMeaning);
Button playbutton = (Button) findViewById(R.id.playBtn);
nameText.setText(name);
meaningText.setText(meaning);
playbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MediaPlayer mediaPlayer = MediaPlayer.create(context,audio);
mediaPlayer.start();
}
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.