RecyclerView遇到的问题

1.RecyclerView中的Item中使用CheckBox出现的问题:

    我们在滑动的时候,其他行的checkbox会莫名地调用setOnCheckedChangeListener,这样我们在滑动的时候,会发现其他行的checkbox会很奇怪勾上,然后滑出界面,又消失了,这个时候,我们需要在

RecyclerView.Adapter的onBindViewHolder方法中,holder.cb.setOnCheckedChangeListener(null);将checkbox的监听取消掉,这样就能保证只有是手动切换状态才能发生setOnCheckedChangeListener内部的方法。

具体实现可以看:

(InvoiceOrderViewHolder holderposition) {
    InvoiceOrderBean bean = .get(position)
    holder..setText(String.format(.getString(R.string.)bean.getCreateTime()))
    holder..setText(String.format(bean.getTotalNum()StringUtil.getDoublePriceNoYuan(bean.getSaleCost())))
    holder..setOnCheckedChangeListener()holder..setChecked(bean.isSelect())holder..setOnClickListener(View.OnClickListener() {
        (View v) {
            Intent intent = Intent(PurchaseOrderDetailActivity.)intent.putExtra(PurchaseOrderDetailActivity.String.valueOf(.getOrderId())).startActivity(intent)}
    })holder..setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener() {
    
        (CompoundButton buttonViewisChecked) {
            .setSelect(isChecked)}
    })}

2.RecyclerView中的Item中有EditText,同时我们需要对EditText增加输入监听的情况出现的问题:

    我们在滑动的时候,其他行的EditText会莫名地调用addTextChangedListener,这个时候,我们的position不能用,onBindViewHolder的position来获取,list中的元素,因为此时的position是不固定的,也就是说list.get(position),这个拿到的object也是不固定的,所以我们需要在addTextChangedListener的afterTextChange方法中重新通过AccountManageBean temp = datas.get(holder.getAdapterPosition());这样能保存temp拿到的值是跟当前的显示的holder是对应的,不然会出现数据紊乱的情况。

(ViewHolder holderposition) {
    Context context = holder..getContext()AccountManageBean bean = .get(position)holder..setText(bean.getJobName())holder..setTag(bean.getJobCode())holder..setText(bean.getName())holder..setText(bean.getPhone())holder..addTextChangedListener(SimpleTextWatcher() {
        (Editable s) {
            (!= ) {
                AccountManageBean temp = .get(.getAdapterPosition())
                (!TextUtils.equals(temp.getName()s.toString())) {
                    .isChange()temp.setChange()temp.setName(s.toString())
                }
            }
        }
    })}

 3.在你用了上面的方案,都感觉达不到你的要求,可以屡试不爽的方案,就是,我们在adapter中外部定义一个private SparseBooleanArrayselectedItems; 来进行记录,我们当前点击的是哪一行,这样我们下次滑动的时候,就根据这个来判断,为true的就是你想影响的那一行,其他行的默认false,就不执行就可以了,都不要执行listener的代码就可以了。

ServiceAdapter BGARecyclerViewAdapter<ServerCategoryBean> {
    String = SparseBooleanArray = -OnItemClickListener ServiceAdapter(RecyclerView recyclerViewitemLayoutId) {
        (recyclerViewitemLayoutId)= SparseBooleanArray()}
    (BGAViewHolderHelper viewHolderHelperpositionServerCategoryBean model) {
        TextView tv = viewHolderHelper.getView(R.id.)LinearLayout ll = viewHolderHelper.getView(R.id.)tv.setText(model.getCategoryName())(.get(position)) {
            highLight(tvll.getResources().getColor(R.color.).getResources().getColor(R.color.))} {
            (== ServicePickActivity.) {
                highLight(tvll.getResources().getColor(R.color.).getResources().getColor(R.color.))} (== ServicePickActivity.) {
                highLight(tvll.getResources().getColor(R.color.).getResources().getColor(R.color.))}
        }
        (position == && ) {
            switchColor(positiontvllmodel)= }
        ll.setOnClickListener(View.OnClickListener() {
            (View v) {
                switchColor()}
        })}
    (positionTextView tvLinearLayout llServerCategoryBean model) {
        .put(position)highLight(tvll.getResources().getColor(R.color.).getResources().getColor(R.color.))(!= position && != -) {
            .delete()notifyItemChanged()}
        = position(!= ) {
            .onItemClick(model)}
    }