ViewHolder views must not be attached when created. Ensure that you are not passing 'true' to the at
阿新 • • 發佈:2018-12-04
如果在使用Recyclerview的時候出現下面的異常
ViewHolder views must not be attached when created. Ensure that you are not passing ‘true’ to the attachToRoot parameter of LayoutInflate
這說明onCreateViewHolder 方法寫錯了
這句話的意思是,viewHolder不予許在建立的時候新增到parent裡,所以如果在onCreateViewHolder方法裡使用:
// View view = inflater.inflate(R.layout.item_view, parent, true);或者
// View view = inflater.inflate(R.layout.item_view, parent);
就會報錯n: ViewHolder views must not be attached when created. Ensure that you are not passing ‘true’ to the attachToRoot parameter of LayoutInflate
只要改成:
// View view = inflater.inflate(R.layout.item_view, null); 或者
// View view = inflater.inflate(R.layout.item_view, parent, false);
即可
那麼這三個引數是什麼意思呢?
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)
第一個引數是傳入的佈局引數
第二個引數是這個佈局的父佈局
第三個就是是否要將這個佈局載入到父佈局裡
1、如果root為null,那麼第三個引數傳入true和false都無影響,因為當root為null的時候就用不到attachToRoot引數,這個佈局的最外層引數也就沒有效果了。
2、如果root不為null
2.1 attachToRoot = true,佈局的最外層屬性會生效並且會新增到root中,返回的view是父佈局
View result = root;
return result;
2.2 attachToRoot = false,佈局會新增到root中,當佈局被新增到root中的時候,佈局的最外層屬性會生效。返回的view是resource指定的佈局
if (root == null || !attachToRoot) {
result = temp;
}
return result;
完畢(#^ . ^#)