RecyclerView代替ListView展示数据列表,解决第一个Item中EditText点击不灵敏的问题
RecyclerView代替ListView展示数据列表,解决第一个Item中EditText点击不灵敏的问题
一、界面布局:
二、创建适配器并添加头部和尾部的功能:
public class RecyclerHomeListAdapter extends RecyclerView.Adapter<RecyclerHomeListAdapter.MyHolder> {
private final int TYPE_HEADER = 0; //说明是带有Header的
private final int TYPE_FOOTER = 1; //说明是带有Footer的
private final int TYPE_NORMAL = 2; //说明是不带有header和footer的
//获取从Activity中传递过来每个item的数据集合
//HeaderView, FooterView
private View mHeaderView;
private View mFooterView;
private List<VipContentList> listList = new ArrayList<>();
private int[] img = {R.drawable.temporary_200_consignment, R.drawable.temporary_200_hot,
R.drawable.temporary_200_new, R.drawable.temporary_200_special, R.drawable.temporary_200_timelimit,
R.drawable.temporary_200_unionpaypreferential};
private OnItemClickListener onItemClickListener;
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
/**
* item的点击事件
*/
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
//刷新数据
public void setItem(List<VipContentList> listM) {
listList.clear();
listList.addAll(listM);
notifyDataSetChanged();
}
// //是否是头部,一般用于一行多列
// public boolean isHead(int position) {
// return mHeaderView != null && position == 0;
// }
//
// public boolean isFoot(int position) {
// if (index == 0)
// return mFooterView != null && position == listModel.size() + 1;
// else
// return mFooterView != null && position == listSupplier.size() + 1;
// }
//添加头部
public void addHeaderView(View headerView) {
mHeaderView = headerView;
notifyItemInserted(0);
}
public void addFooterView(View footerView) {
mFooterView = footerView;
notifyItemInserted(getItemCount() - 1);
}
/**
* 重写这个方法很重要,是加入Header和Footer的关键,我们通过判断item的类型,从而绑定不同的view
*/
@Override
public int getItemViewType(int position) {
if (mHeaderView == null && mFooterView == null) return TYPE_NORMAL;
if (position == 0) return TYPE_HEADER;//第一个item应该加载Header
// if (position == getItemCount() - 1) return TYPE_FOOTER;//最后一个,应该加载Footer
return TYPE_NORMAL;
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (mHeaderView != null && viewType == TYPE_HEADER) return new MyHolder(mHeaderView);
// if (mFooterView != null && viewType == TYPE_FOOTER) return new MyHolder(mFooterView);
View layout = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_homelist, parent, false);
MyHolder viewHolder = new MyHolder(layout);
return viewHolder;
}
//参数设置值
@Override
public void onBindViewHolder(final MyHolder holder, int position) {
if (getItemViewType(position) == TYPE_NORMAL) {
final int positions = position - 1;
ImageLoader.getInstance().displayImage(listList.get(positions).getST_IMGPATH(), holder.image1);
holder.image2.setImageResource(img[positions % 6]);
holder.text1.setText(listList.get(positions).getST_IMGNAME());
holder.text2.setText(listList.get(positions).getST_IMGENGNAME());
if (onItemClickListener != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClickListener.onItemClick(holder.itemView, positions);
}
});
}
return;
} else if (getItemViewType(position) == TYPE_HEADER) {
return;
} else {
return;
}
}
//返回View中Item的个数,这个时候,总的个数应该是ListView中Item的个数加上HeaderView和FooterView
@Override
public int getItemCount() {
if (mHeaderView == null && mFooterView == null) {
return listList.size();
} else if (mHeaderView != null && mFooterView == null) {
return listList.size() + 1;
} else if (mHeaderView == null && mFooterView != null) {
return listList.size() + 1;
} else {
return listList.size() + 2;
}
}
class MyHolder extends RecyclerView.ViewHolder {
ImageView image1;
ImageView image2;
TextView text1;
TextView text2;
public MyHolder(View itemView) {
super(itemView);
image1 = (ImageView) itemView.findViewById(R.id.adapter_home_imageview1);
image2 = (ImageView) itemView.findViewById(R.id.adapter_home_imageview2);
text1 = (TextView) itemView.findViewById(R.id.adapter_home_text1);
text2 = (TextView) itemView.findViewById(R.id.adapter_home_text2);
}
}
}
三、添加头部并设置适配器等
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
recyclerView.setFocusable(false);
gridManager = new GridLayoutManager(getActivity(), 1);//设置RecyclerView管理器
listViewAdapter = new RecyclerHomeListAdapter();
View header = LayoutInflater.from(getActivity()).inflate(R.layout.home_header_view, null);
listViewAdapter.addHeaderView(header);
banner = header.findViewById(R.id.banners);
home_imageview1 = header.findViewById(R.id.home_imageview1);
home_edit = header.findViewById(R.id.home_edit);
home_imageview2 = header.findViewById(R.id.home_imageview2);
home_imageview1.setOnClickListener(this);
home_imageview2.setOnClickListener(this);
recyclerView.setAdapter(listViewAdapter);
recyclerView.setLayoutManager(gridManager);
//分割线的宽度和颜色,颜色为0是背景色
recyclerView.addItemDecoration(new GridDividerItemDecoration(30, getResources().getColor(R.color.white)));
四、home_header_view第一个Item的布局
五、效果展示: