0

Я пытаюсь notifydatasetchanged, когда я закончил редактировать текст редактирования в recyclerview (почему? Потому что некоторые другие объекты в recyclerview доступны, только если для примера текст редактирования равен «test»).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 адаптера. Я также использую getItemType –

0

Это исключение, вероятно, произойдет, когда вы звоните notifyItemInserted (положение) ;, notifyItemChanged (положение), или notifyItemRemoved (позиция); из фоновой нити (или из обратного вызова , который работает на фоновом потоке).

Чтобы решить эту проблему, используйте Handler в UI Тема:

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

Эй, я пробовал это решение еще раз, чтобы убедиться, что приложение не падает, но когда edittext теряет фокус, текст просто исчезает. Я проверяю содержимое своего объекта, когда пишу в тексте редактирования, и он хорошо скопирован. Или если у меня есть 2 раза один и тот же объект в recyclerview (редактировать текст), если я отредактирую его и потеряю фокус, текст переключится на другой текст редактирования. –

Смежные вопросы