一、作业目标
依托作业一,将recyclerView的每个item增加点击功能,点击后跳转到一个新的view展示信息
二、实现思路
1.为recyclerView的每一项列表增加点击功能
2.创建一个Activity,来完成跳转
三、实现过程
1.首先在Myadapter类中添加一个接口,并在onBindViewHolder方法中为每个 RecyclerView 项设置点击监听器:
Context context1;
List <String>list1;
OnItemClickListener clickListener;
public Myadapter(Context context, List list){
context1=context;
list1=list;
}
@NonNull
@Override
public Myholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view =LayoutInflater.from(context1).inflate(R.layout.item,parent,false);
Myholder myholder=new Myholder(view);
return myholder;
}
@Override
public void onBindViewHolder(@NonNull Myholder holder, @SuppressLint("RecyclerView") int position) {
holder.textView.setText(list1.get(position));
holder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickListener.onItemClick(position);
}
});
}
@Override
public int getItemCount() {
return list1.size();
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.clickListener = listener;
}
protected class Myholder extends RecyclerView.ViewHolder {
TextView textView;
public Myholder(@NonNull View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.textView10);
}
}
public interface OnItemClickListener {
void onItemClick(int position);
}
public void onBindViewHolder(@NonNull Myholder holder, @SuppressLint("RecyclerView") int position) { ... }:在这个方法中,绑定数据到 ViewHolder,设置项的内容。在这里,还设置了项的点击事件监听器。
holder.textView.setOnClickListener(new View.OnClickListener() { ... }:为每个项的 textView(假设是显示文本的 View)设置点击监听器。当该项被点击时,触发监听器的 onItemClick 方法。
clickListener.onItemClick(position);:在点击事件中调用点击监听器的 onItemClick 方法,将点击的项的位置传递给监听器。
public interface OnItemClickListener { ... }:定义了一个接口,用于处理点击事件。该接口包含了一个 onItemClick 方法,用于在点击事件发生时执行相应的操作。
2.在Fragment2中为RecyclerView设置点击事件监听器,并跳转到Activity4:
myadapter.setOnItemClickListener(new Myadapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
Context context1=getActivity();
Intent intent=new Intent(context1, Activity4.class);
int i=position;
intent.putExtra("i",i);
startActivity(intent);
}
});
new Myadapter.OnItemClickListener() { ... } 创建了一个匿名内部类,实现了 OnItemClickListener 接口的 onItemClick 方法。这个方法会在 RecyclerView 中的项被点击时调用。
3.完成跳转页面:
Activity4.java:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_4);
Log.d("pjf","4:onCreate...");
button = findViewById(R.id.button9);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
int i=getIntent().getIntExtra("i",0);
Intent intent=new Intent(Activity4.this,MyService1.class);
intent.putExtra("i",i);
textView1=findViewById(R.id.textView9);
textView2=findViewById(R.id.textView11);
textView3=findViewById(R.id.textView13);
String str="歌曲"+(i+1);
textView3.setText(str);
textView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startService(intent);
}
});
textView2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(intent);
}
});
}
}
Activity4实现对后续歌曲的播放和暂停
activity_4.xml:
4.启动项目完成跳转:
点击歌曲1:
点击返回:
点击歌曲2:
成功完成跳转
四、总结
实现跳转的过程中并没有什么问题,只花了一会就完成了,主要问题出现在思考点击不同列表怎么切换到不同的歌曲时,不知道该怎么切换,最终想到了先由Fragment2向Activity4传值,再传向MyServise1,来控制MyServise1播放不同的歌曲,并且传送的值就是position,最终实现了歌曲的切换。