仿微信建群添加人员效果

在项目中需要实现一个类似于微信建群聊天,人员选择的效果,我们先来看下效果图:
仿微信建群添加人员效果_第1张图片

类似于这种效果,实现思路是使用RecycleView的多布局来实现这个效果,最后一个输入框添加在最后面。上具体代码:
选中结果显示RecycleView,当有值的时候使搜索icon隐藏,无值的时候显示出来就可以了



    

    

RecycleView的Item布局分为两个,一个用来显示选中结果;另一个输入搜索条件:
显示选中结果:diagnosis_search_sel_item.xml



    

显示输入条件的edittext布局:diagnosis_search_sel_footview.xml



    

最重要的就是在Adapter中对多布局item的处理了

public class DiagSearchSelAdapter extends CommonAdapter4RV {
    private final int TYPE_NORMAL = 0;
    private final int TYPE_FOOT = 1;

    private View.OnClickListener etQueryClickListener;//条件输入框的点击监听事件
    private TextView.OnEditorActionListener etQueryOnEditorActionListener;//软键盘搜索按钮响应事件

    /**
     * 设置搜索点击监听事件
     *
     * @param etQueryClickListener
     */
    public void setEtQueryClickListener(View.OnClickListener etQueryClickListener) {
        this.etQueryClickListener = etQueryClickListener;
    }

    /**
     * 设置搜索响应软键盘确认事件
     *
     * @param etQueryOnEditorActionListener
     */
    public void setEtQueryOnEditorActionListener(TextView.OnEditorActionListener etQueryOnEditorActionListener) {
        this.etQueryOnEditorActionListener = etQueryOnEditorActionListener;
    }

    public DiagSearchSelAdapter(Context context, List lDatas) {
        super(context, lDatas);
    }

    @Override
    public int getItemCount() {
        return lDatas.size() + 1;
    }

    @Override
    public int getItemViewType(int position) {
        if (isNormalData(position)) {
            return TYPE_NORMAL;
        }
        return TYPE_FOOT;
    }

    @Override
    public int getLayoutId(int viewType) {
        if (TYPE_NORMAL == viewType) {
            return R.layout.diagnosis_search_sel_item;
        } else {
            return R.layout.diagnosis_search_sel_footview;
        }
    }

    /**
     * 判断是否是最后一条数据
     *
     * @param position
     * @return
     */
    private boolean isNormalData(int position) {
        return position < getItemCount() - 1;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        if (isNormalData(position)) {
            super.onBindViewHolder(holder, position);
        } else {
            holder.setItemPosition(position);
            delFootView(holder);
        }
    }

    @Override
    public void getItemView(ViewHolder holder, DiagnosisBean diagnosisBean) {
        holder.setText(R.id.diagSelTvTitle, diagnosisBean.getTitle());
    }

    /**
     * 处理查询框事件
     *
     * @param holder
     */
    private void delFootView(ViewHolder holder) {
        EditText etQuery = holder.getView(R.id.diagItemEtQuery);
        etQuery.setOnClickListener(etQueryClickListener);
        etQuery.setOnEditorActionListener(etQueryOnEditorActionListener);
    }
}

这里是实现这个效果的核心代码了,关于CommonAdapter4RV通用适配器的实现,去看鸿神博客吧!

你可能感兴趣的:(android,搜索,RecycleView)