private static class MessageViewHolder extends RecyclerView.ViewHolder { private TextView mTextMessage; private LinearLayout mContainer; MessageViewHolder(@NonNull View itemView) { super(itemView); mTextMessage = itemView.findViewById(R.id.text_message); mContainer = itemView.findViewById(R.id.container); } void bind(Message message) { mTextMessage.setText(message.text); if (message.isSent) { // 自己发送的消息,右对齐 mContainer.setGravity(Gravity.END); } else { // 对方发送的消息,左对齐 mContainer.setGravity(Gravity.START); } } }伪代码表示
时间: 2024-04-27 15:22:29 浏览: 7
定义一个静态内部类 MessageViewHolder,并继承自 RecyclerView.ViewHolder 类。该类有两个成员变量:mTextMessage 和 mContainer。在构造函数中通过 findViewById 方法获取对应的控件。该类还有一个 bind 方法,用于将 Message 对象绑定到 ViewHolder 上。在 bind 方法中,首先根据 Message 对象中的文本设置 mTextMessage 的文本;然后根据 Message 对象中的 isSent 属性,判断该消息是自己发送的还是对方发送的,从而设置 mContainer 的重心位置,使得自己发送的消息右对齐,对方发送的消息左对齐。
相关问题
public class BrowseAdapter extends RecyclerView.Adapter<BrowseAdapter.ViewHolder> { private List<Browse> list =new ArrayList<>(); private Context mActivity; private ItemListener mItemListener; private LinearLayout llEmpty; private RecyclerView rvNewsList; public void setItemListener(ItemListener itemListener){ this.mItemListener = itemListener; } public BrowseAdapter(LinearLayout llEmpty, RecyclerView rvNewsList){ this.llEmpty = llEmpty; this.rvNewsList =rvNewsList; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { mActivity = viewGroup.getContext(); View view= LayoutInflater.from(mActivity).inflate(R.layout.item_rv_collect_list,viewGroup,false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) { Browse browse = list.get(i); if (browse != null) { viewHolder.title.setText(browse.getTitle()); viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mItemListener!=null){ mItemListener.ItemClick(browse); } } }); } } public void addItem(List<Browse> listAdd) { //如果是加载第一页,需要先清空数据列表 this.list.clear(); if (listAdd!=null){ //添加数据 this.list.addAll(listAdd); } //通知RecyclerView进行改变--整体 notifyDataSetChanged(); } @Override public int getItemCount() { return list.size(); } public class ViewHolder extends RecyclerView.ViewHolder { private TextView title; public ViewHolder(@NonNull View itemView) { super(itemView); title = itemView.findViewById(R.id.title); } } public interface ItemListener{ void ItemClick(Browse browse); } }
这是一个 RecyclerView 的适配器类,用于显示浏览记录列表。其中:
- ViewHolder:用于缓存每一个列表项的视图控件,避免每次滑动列表时都进行 findViewById 操作。
- onCreateViewHolder:创建 ViewHolder 实例,将列表项的布局文件填充到 ViewHolder 中。
- onBindViewHolder:将数据绑定到 ViewHolder 上,即设置列表项的标题和点击事件。
- addItem:添加数据方法,用于在适配器中添加浏览记录数据并刷新 RecyclerView。
- ItemListener:自定义接口,用于处理列表项的点击事件。
需要注意的是,该适配器类中的 llEmpty 和 rvNewsList 两个成员变量并未被使用,可能是之前的开发者留下的一些冗余代码。
使用RecyclerView生成列表
好的,下面是使用RecyclerView生成列表的基本步骤:
1. 在布局文件中添加RecyclerView控件,例如:
```
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
```
2. 创建列表项的布局文件,例如:
```
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/itemTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/itemDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="14sp" />
</LinearLayout>
```
3. 创建一个适配器类,继承RecyclerView.Adapter类,并实现必要的方法,例如:
```
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<Item> mItems;
public MyAdapter(List<Item> items) {
mItems = items;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Item item = mItems.get(position);
holder.title.setText(item.getTitle());
holder.description.setText(item.getDescription());
}
@Override
public int getItemCount() {
return mItems.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView title;
TextView description;
ViewHolder(View itemView) {
super(itemView);
title = itemView.findViewById(R.id.itemTitle);
description = itemView.findViewById(R.id.itemDescription);
}
}
}
```
4. 在Activity或Fragment中设置RecyclerView的适配器和布局管理器,例如:
```
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(new MyAdapter(items));
```
其中,items是一个包含所有列表项数据的List对象。
以上就是使用RecyclerView生成列表的基本步骤。