仿京东、饿了么 左右联动菜单列表
这是一个左右联动的自定义View
这里本人将两个列表进行了联动封装,使用的时候调用方法即可,方便快捷,扩展性也强。
效果图:
正题开始:
我们看一下API
- 设置左边列表的ITem布局
//设置左边Item的自定义布局 layout
public void setLeftLayoutId(int layoutId){
this.leftLayoutId = layoutId;
initView(context);
}
- 设置右边列表的Item布局
//设置右边Item的自定义布局 layout
public void setRightLayoutId(int layoutId){
this.rightLayoutId = layoutId;
initView(context);
}
- 左边ITem是否自动等比铺满
//设置左边的Item高度是否自动等比铺满
public void setLeftItemAutoScreen(boolean isAuto)
- 设置选中、未选中样式
//设置左边的列表的Item的选中、未选中的背景以及字体颜色
public void setLeftSelectStatus(int leftSelectBg,int leftUnSelectBg,int leftSelectTxColor,int leftUnSelectTxColor)
- 设置左、右的列表宽高(默认铺满)
setRvLeftWidthHeight(getResources().getDimensionPixelOffset(R.dimen.dp_100),ViewGroup.LayoutParams.MATCH_PARENT);
setRvRightWidthHeight(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
设置数据源,这里接受泛型数据
//设置左右两边的数据源
//数据实体可自行继承 DLLinkeAgeItem 扩展字段(必须继承DLLinkeAgeItem)
//leftData-左边列表数据源 rightData-右边数据源
public void setData(List<T> leftData,List<M> rightData)
监听
- 初始化监听
- onBindItem、onBindRightItem相当于RV的onBindViewHolder绑定数据源
dlView.setOnRvInitListener(new DolinLinkAgeRVView.OnRvInitListener() {
//左边Item初始化
@Override
public void onBindItem(RecyclerView.ViewHolder holder, View itemView, int position) {
TextView tv_title = itemView.findViewById(R.id.tv_title);
tv_title.setText(aList.get(position).getName());
}
//右边Item初始化
@Override
public void onBindRightItem(RecyclerView.ViewHolder holder, View itemView, int position) {
TextView tv_title = itemView.findViewById(R.id.tv_right_title);
tv_title.setText(bList.get(position).getName());
}
});
- 左边列表点击事件
dlView.setOnLeftItemClickListener(new DolinLinkAgeRVView.OnLeftItemClickListener() {
@Override
public void onItemClick(int position) {
Toast.makeText(SecondActivity.this,"点击了左边第"+position+"个",Toast.LENGTH_SHORT).show();
}
});
- 右边列表点击事件
dlView.setOnRightItemClickListener(new DolinLinkAgeRVView.OnRightItemClickListener() {
@Override
public void onItemClick(int position) {
Toast.makeText(SecondActivity.this,"点击了第"+position+"个",Toast.LENGTH_SHORT).show();
}
@Override
public void onLongClick(int position) {
Toast.makeText(SecondActivity.this,"长按了第"+position+"个",Toast.LENGTH_SHORT).show();
}
});