作业目标:
在作业1的基础上,为RecyclerView的每个item添加点击功能。点击后,跳转到一个新的View以展示详细信息。
开发技术:
ArrayList<Map<String, Object>>, HashMap, RecyclerView, Intent, startActivity()
思路分析:
-
设计RecyclerView页面。
-
创建一个新的Activity,用于实现点击跳转。
设计过程:
一、设计RecyclerView页面
-
修改作业1中的item.xml,使其类似微信消息界面。
-
编写适配器MyAdapter,配置RecyclerView的内容展示和点击跳转功能。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
// ... (其他代码)
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
// ... (其他代码)
holder.itemLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, MessageDetailActivity.class);
intent.putExtra("消息内容", data1.get(position).get("消息内容").toString());
context.startActivity(intent);
}
});
}
// ... (其他代码)
public class MyViewHolder extends RecyclerView.ViewHolder {
LinearLayout itemLayout;
TextView name;
TextView content;
ImageView avatar;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
itemLayout = itemView.findViewById(R.id.M_layout);
name = itemView.findViewById(R.id.textViewM1);
content = itemView.findViewById(R.id.textViewM2);
avatar = itemView.findViewById(R.id.imageViewM);
}
}
}
- 在消息界面的Fragment中(作业1中的fragment1.java)写入并管理要展示的消息内容。
public class Fragment1 extends Fragment {
// ... (其他代码)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// ... (其他代码)
myAdapter = new MyAdapter(view.getContext(), data);
LinearLayoutManager manager = new LinearLayoutManager(view.getContext());
manager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(manager);
recyclerView.setAdapter(myAdapter);
return view;
}
}
二、新建Activity实现item的点击跳转
-
新建一个Activity用于展示跳转后的内容。
-
设计该Activity对应的activity_message_detail.xml文件,实现期望的页面布局。
-
实现页面跳转和参数传递。
为了方便,只创建了一个Activity。但要实现点击不同item跳转到对应内容,通过Intent传递和接收参数。
在MyAdapter中写一个startActivity()函数,实现点击item跳转到详细内容页面:
holder.itemLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context1, MessageDetailActivity.class);
intent.putExtra("消息内容", data1.get(position).get("消息内容").toString());
context1.startActivity(intent);
}
});
在MessageDetailActivity中使用getStringExtra()接收intent传来的内容:
Intent intent = getIntent();
String detail = intent.getStringExtra("消息内容");
textView.setText(detail);
MessageDetailActivity通过返回按钮button的监听使用finish()函数退出当前页面,回到初始的RecyclerView页面:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
三、效果展示
四、总结
这次实验分两次完成。第一次初步实现了跳转功能,但所有item跳转后内容相同。第二次在此基础上实现了参数传递,使得点击不同item跳转到不同消息内容。页面跳转不难,但参数传递容易因为粗心导致错误,需要注意putExtra()和getStringExtra()的对应关系,以及RecyclerView页面的展示内容要与数据对应。
五、代码仓库地址