RecyclerView踩坑记录
2017-12-17 本文已影响6人
Aron1001
1,adapter中绑定数据的时候如果使用了if一定要加else,否则数据会错乱;
if() {
} else{
}
2,adapter中创建volder方法中inflate布局时,要采用如下的写法:
inflate(R.layout.item_list, parent, false)
不能采用如下的写法:
inflate(R.layout.item_list, null)
两者的区别在于:
三个参数的infalte为item_list指定了一个父布局,使得item_list的跟节点的width和height属性有效,而第二种写法没有为item_list指定任何的父布局,其根节点的属性自然没有意思。如果想让item_list的根节点有效,又不想让它处于某一容器中,就采用第一种写法。
3,adapter中使用EditText和CheckBox数据错乱的问题
- 可通过setTag的方式解决:
holder.priceEdit.setTag(bean);//任意控件都可以设置tag
...
//使用时:
((SalePriceBean)holder.priceEdit.getTag()).xx
- 设置接口回调的方式解决
public interface OnItemEditTextChangedListener {
void onEditTextAfterTextChanged(String num, int position);
}
public interface OnItemCheckChangeListener {
void onItemCheckChange(boolean isChecked, int position);
}
...
et.addTextChangedListener(new TextWatcher() {
...
@Override
public void afterTextChanged(Editable s) {
if (!TextUtils.isEmpty(s.toString())&&(!s.toString().equals("-"))) {
mListener.onEditTextAfterTextChanged(s.toString(), helper.getLayoutPosition());
}
}
});
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
item.isSelect = !item.isSelect;
onItemCheckChangeListener.onItemCheckChange(item.isSelect, helper.getLayoutPosition());
}
});
4,Item布局时根节点的height要设置为wrap_content,否则会出现每个item布局充满屏幕的现象。