Fragement与RecyelerView的结合
应用RecyclerView,完成在页面的设计
项目结果演示
步骤
- 在Fragment对应的布局文件中添加RecyclerView组件以及相应的.xml文件
微信首页设计部分代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center"
android:text="这是微信聊天界面"
android:textColor="@android:color/white"
android:background="@android:color/holo_green_dark"
android:textSize="25sp"
android:textStyle="bold" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rcv_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:overScrollMode="never"
android:scrollbars="none"
/>
</LinearLayout>
- 编写RecyclerView适配器
GroupAdapter继承RecyclerView.Adapter。因为必须重写onCreateViewHolder(),onBindViewHolder()和getItemCount()三个方法。
onCreateViewHolder()用于创建ViewHolder实例,并把加载的布局传入到构造函数去,再把ViewHolder实例返回。
onBindViewHolder()则是用于对子项的数据进行赋值,会在每个子项被滚动到屏幕内时执行。position得到当前项的Fruit实例。
getItemCount()返回RecyclerView的子项数目。
package com.example.myapplicationmyweixin;
public class GroupAdapter extends RecyclerView.Adapter<GroupAdapter.GroupViewHolder> {
private static final String TAG = GroupAdapter.class.getSimpleName();
private Context mContext;
private List<GroupDataBean> mList = new ArrayList<>();
public GroupAdapter(Context context) {
mContext = context;
}
public void setGroupDataList(List<GroupDataBean> list) {
mList = list;
notifyDataSetChanged();
}
@NonNull
@Override
public GroupAdapter.GroupViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.group_recycle_item, parent, false);
return new GroupViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull GroupAdapter.GroupViewHolder holder, int position) {
holder.tvArea.setText(mList.get(position).getArea());
holder.tvTeam.setText(mList.get(position).getTeam());
if (position == 0) {
holder.tvArea.setVisibility(View.VISIBLE);
} else {
if (mList.get(position).getArea().equals(mList.get(position - 1).getArea())) {
holder.tvArea.setVisibility(View.GONE);
} else {
holder.tvArea.setVisibility(View.VISIBLE);
}
}
}
@Override
public int getItemCount() {
return mList == null ? 0 : mList.size();
}
public class GroupViewHolder extends RecyclerView.ViewHolder{
TextView tvArea, tvTeam;
public GroupViewHolder(@NonNull View itemView) {
super(itemView);
tvArea = itemView.findViewById(R.id.tv_area);
tvTeam = itemView.findViewById(R.id.tv_team);
}
}
}
- 在Fragment中定义使用
创建完Adapter,接着需要在Fragment中对RecyclerView进行设置
private void initRecyclerView(){
//获取RecycleView
mCollectRecyclerView=(RecyclerView)view.findViewById(R.id.rcv_group);
//创建Adapter
groupAdapter = new GroupAdapter(getContext());
//给RecyclerView设置adapter
mCollectRecyclerView.setAdapter(groupAdapter);
//设置layoutManager
mCollectRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mCollectRecyclerView.setHasFixedSize(true);
groupAdapter.setGroupDataList(mDataList);
}
RecyclerView的应用关键主要在于适配器的编写,将适配器配置完成,之后的工作就比较简单了。