使用RecyclerView中引發 java.lang.IllegalStateException: Cannot call this method while RecyclerView is com
阿新 • • 發佈:2019-01-31
出錯原因
在介面卡onBindViewHolder(….)方法裡呼叫了notifyItemChanged(position),導致RecyclerView還沒有渲染完滑動引發的
錯誤程式碼
@Override
public void onBindViewHolder(final ContentViewHolder holder, final int position) {
.....
holder.et_Number.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
//TODO 問題就是我通過Log列印日誌發現這個onBindViewHolder()載入資料時會一直渲染,導致notifyItemChanged(position)一直在迴圈,就會導致滑動時還沒渲染完就呼叫這方法了
if(!b){
//焦點失去時重新整理
notifyItemChanged(position);
}
}}
......
}
我的解決方法
int myPosition = -1;
@Override
public void onBindViewHolder(final ContentViewHolder holder, final int position) {
.....
holder.et_Number.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
// TODO 在外面定義個變數myPosition ,當myPosition 不等於position就執行notifyItemChanged(position),這樣的話每次就只執行一次了,再執行專案滑動失去焦點重新整理就OK了
if(!b){
//焦點失去時重新整理
if(myPosition == position)
return;
myPosition = position
notifyItemChanged(position);
}
}}
......
}