Android自定义View实现简单列表
2020-03-22 本文已影响0人
itfitness
目录
前言
某些项目中需要实现简单的自适应高度列表,这时使用RecyclerView或者ListView就需要处理列表的自适应高度,另外外层嵌套ScrollView还会有滑动问题,因此结合需求就实现了一个简单的自适应高度的列表。
效果展示
实现原理
代码展示
public class SimpleListView extends LinearLayout {
private OnItemClickListener onItemClickListener;
private Context mContext;
private int itemLayout;
private CovertViewListener covertViewListener;
public CovertViewListener getCovertViewListener() {
return covertViewListener;
}
public void setCovertViewListener(CovertViewListener covertViewListener) {
this.covertViewListener = covertViewListener;
}
public OnItemClickListener getOnItemClickListener() {
return onItemClickListener;
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public SimpleListView(Context context) {
this(context,null);
}
public SimpleListView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public SimpleListView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mContext = context;
setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
setOrientation(VERTICAL);
}
/**
* 设置数据
* @param layoutRes
* @param items
* @param covertViewListener
*/
public void setDatas(@LayoutRes int layoutRes , @NonNull final List<?> items, CovertViewListener covertViewListener){
itemLayout = layoutRes;
this.covertViewListener = covertViewListener;
removeAllViews();
for(int i = 0 ; i < items.size() ; i++){
View itemView = View.inflate(mContext, layoutRes, null);
if(covertViewListener!=null){
covertViewListener.covert(itemView,items.get(i));
}
final int finalI = i;
itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if(onItemClickListener!=null){
onItemClickListener.onItemClick(finalI,items.get(finalI));
}
}
});
addView(itemView);
}
}
/**
* 更新数据
* @param items
*/
public void updateDatas(@NonNull final List<?> items){
removeAllViews();
for(int i = 0 ; i < items.size() ; i++){
View itemView = View.inflate(mContext, itemLayout, null);
if(covertViewListener!=null){
covertViewListener.covert(itemView,items.get(i));
}
final int finalI = i;
itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if(onItemClickListener!=null){
onItemClickListener.onItemClick(finalI,items.get(finalI));
}
}
});
addView(itemView);
}
}
/**
* 给item添加数据
*/
public interface CovertViewListener<T>{
void covert(View view,T data);
}
public interface OnItemClickListener<T>{
void onItemClick(int position, T data);
}
}