1.RecyclerView中的Item中使用CheckBox出现的问题:
我们在滑动的时候,其他行的checkbox会莫名地调用setOnCheckedChangeListener,这样我们在滑动的时候,会发现其他行的checkbox会很奇怪勾上,然后滑出界面,又消失了,这个时候,我们需要在RecyclerView.Adapter的onBindViewHolder方法中zholder.cb.setOnCheckedChangeListener(null);将checkbox的监听取消掉,这样就能保证只有是手动切换状态才能发生setOnCheckedChangeListener内部的方法。
具体实现可以看:
(InvoiceOrderViewHolder holderposition) {
InvoiceOrderBean bean = mDatas.get(position);
holder.tvTime.setText(String.format(.getString(R.string.)bean.getCreateTime()));
holder.cb.setOnCheckedChangeListener(null);
holder.tvNum.setText(String.format(bean.getTotalNum()));
holder.tvClick.setOnClickListener(View.OnClickListener() {
onClick (View v) {
Intent intent = Intent(PurchaseOrderDetailActivity.);
intent.putExtra(PurchaseOrderDetailActivity.String.valueOf(.getOrderId()));
v.getContext().startActivity(intent)}
});
holder.cb.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener() {
(CompoundButton buttonViewisChecked) {
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是对应的,不然会出现数据紊乱的情况。onBindeViewHolder方法中的实现体:
具体实现可以看:
AccountManageBean bean = mDatas.get(position);
holder.tvJob.setText(bean.getJobName());
holder.tvJob.setTag(bean.getJobCode());
holder.etName.addTextChangedListener(SimpleTextWatcher() {
(Editable s) {
AccountManageBean temp = mDatas.get(.getAdapterPosition())
if(!TextUtils.equals(temp.getName()s.toString())) {
temp.setChange(true);
temp.setName(s.toString())
}
}
})}
3.在你用了上面的方案,都感觉达不到你的要求,可以屡试不爽的方案,就是,我们在adapter中外部定义一个private SparseBooleanArrayselectedItems; 来进行记录,我们当前点击的是哪一行,这样我们下次滑动的时候,就根据这个来判断,为true的就是你想影响的那一行,其他行的默认false,就不执行就可以了,都不要执行listener的代码就可以了。
4.在recyclerview23.2.1之前的话,如果我们在ScrollView中嵌套recyclerView,我们需要写LinearLayoutManagerUnScrollable,重写onMeasure方法,然后就计算子view的高度,然后去重新设置recyclerView的高度,但是这个有个问题,就是当recyclerView的高度会动态改变高度,比如我在某个地址列表界面,点击列表上按钮跳转到别的界面,然后选择了新的很长的地址,然后回来到列表界面,刷新,然后recyclerview就显示不全了,超过一行的文字就显示不出来,需要滑动,选择23.2.1以后的版本修复了这个bug,只需要在设置LinearLayoutManager的时候,增加下面的代码:
LinearLayoutManager manager = new LinearLayoutManager(this);
manager.setAutoMeasureEnabled(true)