RecyclerView代替ListView展示数据列表,解决第一个Item中EditText点击不灵敏的问题

    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的布局

RecyclerView代替ListView展示数据列表,解决第一个Item中EditText点击不灵敏的问题

五、效果展示:

RecyclerView代替ListView展示数据列表,解决第一个Item中EditText点击不灵敏的问题RecyclerView代替ListView展示数据列表,解决第一个Item中EditText点击不灵敏的问题