Android列表RecyclerView排列布局
程序员文章站
2022-03-13 17:08:29
...
效果图:
1.要添加相关的依赖
implementation 'androidx.recyclerview:recyclerview:1.1.0'
2.然后布局文件中准备容器
这个标签是显示目标容器对象的,其他需求可自定义
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_list"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</androidx.recyclerview.widget.RecyclerView>
3.制作模板显示
这里的模板是自定义的,需要什么样的就怎么布局,这里只是模板,后面做好就会根据模板生成样式的
4.写一个适配器,用于加载数据
public class ShiftInForMationAdapter extends RecyclerView.Adapter<ShiftInForMationAdapter.ShiftInForMation>{
private List<ShiftInFormationBean> mListData;//需要加载的数据
private Activity mActivityContext; //上下文
private MyApplication myApplication;//全局Application对象
private OnItemClickListener onItemClickListener;//存放点击事件的实现类
//存放点击事件的实现类
public interface OnItemClickListener{
//整条数据的点击事件
void onItemClick(View view,ShiftInFormationBean shift,int position);
//点击》事件
void onImageClick(View view,ShiftInFormationBean shift,int position);
}
/**
* 构造方法 获取需要的参数
* @param mListData 需要的数据
* @param mActivityContext 上下文
* @param myApplication app全局变量
*/
public ShiftInForMationAdapter(List<ShiftInFormationBean> mListData ,Activity mActivityContext,MyApplication myApplication){
this.mActivityContext = mActivityContext;
this.mListData = mListData;
this.myApplication = myApplication;
}
//设置点击事件方法
public void setItemClickListener(OnItemClickListener onItemClickListener){
this.onItemClickListener = onItemClickListener;
}
/**
* 生命周期方法 创建
* 创建ViewHolder 设置RecyclerViewItem布局
* @param parent
* @param viewType
* @return
*/
@NonNull
@Override
public ShiftInForMation onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_rv_search_result,parent,false);
return new ShiftInForMation(view);
}
/**
* 绑定数据
* @param holder 显示的列表具体信息的布局
* @param position
*/
@Override
public void onBindViewHolder(@NonNull ShiftInForMation holder, int position) {
ShiftInFormationBean shift = mListData.get(position);
if(shift != null){
//余座剩余小于1 灰色
if(Integer.valueOf(shift.getSearchSupus()) < 1){
//没有余座,设置为灰色
holder.tvShiftName.setTextColor(mActivityContext.getResources().getColor(R.color.colorGray));
}
holder.tvShiftName.setText("班次名称:" +shift.getShiftName()); //==设置班次名称
BigDecimal discount = BigDecimal.valueOf(0.98);//默认
if(myApplication.isLogin()){
discount = new BigDecimal(myApplication.getLoginUser().getMemberDiscount());
}
//设置事件
if(onItemClickListener != null){
//设置整条数据的点击事件
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClickListener.onItemClick(v,shift,position);
}
});
}
}
}
//告诉RecyclerView有多少条数据
@Override
public int getItemCount() {
return mListData.size();
}
/**
* 对外方法,用于分页添加数据
* @param listAdd 要添加的数据
* @param loadPage 加载的页数
*/
public void addItem(List<ShiftInFormationBean> listAdd){
//如果是第一页 需要先清空数据列表
this.mListData.clear();
//添加数据
if(listAdd != null){
this.mListData.addAll(listAdd);
}
//通知RecyclerView进行改变--整体
notifyDataSetChanged();
}
//获取列表数据控件
static class ShiftInForMation extends RecyclerView.ViewHolder{
TextView tvShiftName ;//班次名称
public ShiftInForMation(@NonNull View itemView) {
super(itemView);
tvShiftName = itemView.findViewById(R.id.tv_item_result_roomTypeInfo);
}
}
}
5.使用RecyclerView 初始化
//===1、设置布局控制器
//=1.1、创建布局管理器
LinearLayoutManager layoutManager = new LinearLayoutManager(mActivityContext);
//=1.2、设置为垂直排列,用setOrientation方法设置(默认为垂直布局)
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//=1.3、设置recyclerView的布局管理器
rvOrderList.setLayoutManager(layoutManager);
//==2、实例化适配器
//=2.1、初始化适配器
List<TicketPurchaseVoBean> mListData = new ArrayList<>();
ticketPurchaseAdapter = new TicketPurchaseAdapter(mActivityContext,mListData);
//=2.2设置列表项点击事件
//=2.2设置列表项点击事件
ticketPurchaseAdapter.setOnItemClickListener(new TicketPurchaseAdapter.OnItemClickListener() {
//方法里的参数都是可以在适配器选择的
@Override
public void onItemClick(View view, TicketPurchaseVoBean data, int position) {
//写需求
}
});
//=2.3、设置recyclerView的适配器
rvOrderList.setAdapter(ticketPurchaseAdapter);
到这里就完成了,点击事件 加载数据的方法里面都是可以按需求自定义的,布局也是可按需要来布局的,这里给的只是一个模板。
推荐阅读
-
Android RecyclerView加载两种布局的方法
-
Android RecyclerView线性布局详解(1)
-
Android RecyclerView网格布局(支持多种分割线)详解(2)
-
Android RecyclerView网格布局(支持多种分割线)详解(2)
-
Android RecyclerView线性布局详解(1)
-
Android单个RecyclerView实现列表嵌套的效果
-
Android中RecyclerView实现多级折叠列表效果(二)
-
Android中RecyclerView实现多级折叠列表效果(TreeRecyclerView)
-
Android单个RecyclerView实现列表嵌套的效果
-
Android使用RecyclerView实现列表数据选择操作