一、所需文件及成果展示
此项目需要Activity3、Fragment1、Myadapter、Myservice14个文件
点击交换余生:
即可播放、停止或返回
二、整体思路
1.在Fragment1中设置好recyclerView的每个ietm的内容。
2.在适配器(Myadapter)中设置监听器,接收点击位置的字符串(即歌名)并发给Activity3。
3.设置好“播放”“停止”“返回”三个button在此基础上Activity3收到适配器传来的字符串后将该字符串传给Myservice1.并启动该服务(Myservice1)。
4.Myservice1收到字符串后对歌单进行比对并播放相应歌曲。
三、实现过程
1.在Fragment1中添加歌曲名
list=new ArrayList();
list.add("交换余生");
list.add("花海");
2.适配器(Myadapter)的编写
基于上次的博客这次的适配器主要是对 onBindViewHolder 函数的编写,主要是加入了一个监听器来获取点击部位的字符串
@Override
public void onBindViewHolder(@NonNull Myholder holder, int position) {
holder .textView.setText(list1.get(position));
holder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 处理点击事件,比如跳转到另一个Activity
Intent intent = new Intent(v.getContext(), Activity3.class);
String data = holder.textView.getText().toString();//get到此item的String
intent.putExtra("name",data);//传递该String到Activity3
v.getContext().startActivity(intent);
}
});
}
3.Activity3的编写
(1)各个button、Intent、textview的定义和声明。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_3);
button3=findViewById(R.id.button3);
button8=findViewById(R.id.buttonplay);
button4=findViewById(R.id.buttonstop);
textView1133=findViewById(R.id.textView1133);
Intent getintent=getIntent();
String str3=getintent.getExtras().getString("name");
textView1133.setText(str3);
Intent intent1=new Intent(Activity3.this, MyService1.class);
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent();
intent.putExtra("result","888");
setResult(666,intent);
finish();
}
});
button8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent1.putExtra("name",str3);//传参给Myservice1
startService(intent1);//启动服务
}
});
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
stopService(intent1);
}
});
Log.d("yxs","Activity3:oncreate");
}
}
4.Myservice1的编写
public int onStartCommand(Intent intent, int flags, int startId)函数自带Intent参数直接在其内部接收传来的字符串并进行歌曲筛选
public int onStartCommand(Intent intent, int flags, int startId) {
String str =intent.getExtras().getString("name");
if (str.equals("交换余生"))
i=0;
else if (str.equals("花海"))
i=1;
setSong(i);
player.start();
return super.onStartCommand(intent, flags, startId);
}
在此之前将歌曲放入了music数组方便选择,并编写setSong()方法实现歌曲的切换播放:
int[] music={
R.raw.changelife ,
R.raw.huahai};
public void setSong(int songIndex){
//该方法用来实现点击歌曲播放相应歌曲
if(songIndex>=0&&songIndex<= music.length){
player.stop();
player.release();
player=MediaPlayer.create(this,music[songIndex]);
}
}
四、总结
此次作业代码量较小,也较简单。其实还有更简单的实现方式:即在点击item的时候获取position参数可以直接得到recyclerView的索引,将歌单的歌曲顺序按照recyclerView的索引顺序排列,即可在Myservice1中播放相应索引的歌曲,不必进行字符串比对,且在添加歌曲的时候只需在music数组中添加歌曲,更为方便。
Gitee:
安卓开发: 此为安卓开发课程作业 (gitee.com)https://gitee.com/Shuo1123/android-development