0

我試圖notifydatasetchanged當我已經完成編輯回收站視圖中的編輯文本(爲什麼?因爲其他一些對象在recyclerview只能訪問例如爲例編輯文本等於「測試」)。Android - notifyDataSetChanged當我編輯editText完成

所以我有很多觀點持有者適配器,這裏是一個編輯短信:

public EditTextViewHolder(View itemView, final Activity activity, final Context context, final String param) { 
    super(itemView); 

    this.activity = activity; 
    this.context = context; 
    this.param  = param; 


    name  = (TextView) itemView.findViewById(R.id.tEditTextName); 
    desc  = (TextView) itemView.findViewById(R.id.tEditTextDescription); 
    details  = (TextView) itemView.findViewById(R.id.tEditTextMoreDetails); 
    editText = (EditText) itemView.findViewById(R.id.eEditTextValue); 
    image  = (ImageView) itemView.findViewById(R.id.iEditTextImage); 
    lMain  = (LinearLayout) itemView.findViewById(R.id.layoutTaskEditText); 
    lOptional = (LinearLayout) itemView.findViewById(R.id.layoutEditTextOptional); 
    lRequired = (LinearLayout) itemView.findViewById(R.id.isRequiredTask); 

} 

public void setLayout(final Content content) { 
    name.setText(content.getTitle()); 

editText.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      content.getAnswers().get(0).setValue(s.toString().trim()); 
     } 
    }); 

    editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (!hasFocus) 
       TaskActivity.sAdapter.notifyDataSetChanged(); 
     } 
    }); 
} 

但我得到的錯誤「無法調用此方法同時RecyclerView正在計算佈局或滾動」即使我嘗試在處理程序或UI線程中通知它不起作用。

它與我的所有其他查看持有人一起工作。你知道我在做什麼編輯文本錯誤嗎?

回答

0

嘗試在適配器上調用notifyDataSetChanged而不是活動,並在UIThread中調用它。

activity.runOnUiThread(new Runnable() { 

             @Override 
             public void run() { 

             } 
            }); 

,並確保您的適配器內部有這種方法與數據

@Override 
    public int getItemCount() { 
    } 
+0

嘿,我已經試過這個解決方案再次被肯定,但它肯定不工作我還是有「不能打電話,同時RecyclerView這種方法正在計算佈局或滾動「。我在不同的文件中擁有很多查看持有者,這就是爲什麼我通過適配器爲公共靜態的活動獲取適配器的原因。 –

+0

你可以發佈更多的代碼嗎?你還在哪裏調用setLayout方法? –

+0

setLayout(名稱可能不合適)從適配器的onbind函數中調用。我也uset getItemType –

0

的權數此異常,當你調用 notifyItemInserted(位置);, notifyItemChanged(位置)可能會發生,或者 notifyItemRemoved(position);來自後臺線程(或來自在後臺線程上運行的 回調)。

爲了解決這個問題,在UI線程中使用Handler

android.os.Handler mHandler = getActivity().getWindow().getDecorView().getHandler(); 
mHandler.post(new Runnable() { 
    public void run(){ 
      //change adapter contents 
      mRecyclerViewAdapter.notifyItemInserted(position); 
    } 
}); 
+0

嘿,我已經嘗試了這種解決方案再次確保,應用程序不會崩潰,但是當edittext失去焦點文本簡單地消失。我在編輯文本中寫入時檢查了對象的內容,並且很好地複製了它。或者如果我在recyclerview(編輯文本)中有2次相同的對象,如果我編輯一個並失去焦點,則文本切換到其他編輯文本。 –