Удаление представлений в других положениях адаптера

#java #android #android-recyclerview #android-viewholder

#java #Android #android-recyclerview #android-viewholder

Вопрос:

Проблема: я пытаюсь условно удалить компонент линейной компоновки элемента в представлении recycler внутри раздела onBindViewHolder адаптера, но я не могу понять, как получить доступ к предыдущему представлению для этого. Как мне это сделать? Следующее работает для самого последнего добавленного элемента, но как мне сделать это для ранее добавленных элементов? Это происходит внутри адаптера, поэтому у меня нет прямого доступа к RecyclerView или layoutmanager.

 if (holder.mContainer.getParent() != null) {
       ((ViewGroup) holder.mEmotionLayout.getParent()).removeView(holder.mEmotionLayout);
}
holder.mMainLayout.addView(holder.mEmotionLayout, 1); 
  

Пожалуйста, дайте мне знать, если вам нужно, чтобы я что-нибудь добавил к сообщению. Спасибо.

Обновление: я попытался передать диспетчер линейной компоновки адаптеру, как показано ниже, а затем попытался удалить рассматриваемые представления с помощью последующего кода, но findViewById всегда возвращает null.

 private LinearLayoutManager linearLayoutManager;

public ChatAdapter(LinearLayoutManager linearLayoutManager) {
   
    this.linearLayoutManager = linearLayoutManager;
  

Внутри onBindViewHolder:

 ((ViewGroup) linearLayoutManager.getChildAt(position-1).findViewById(R.id.emotionLayout).getParent()).removeView(linearLayoutManager.getChildAt(position-1).findViewById(R.id.emotionLayout));
  

Решено: удалось добиться некоторого успеха с использованием списков массивов для хранения старых держателей представлений, но иногда я сталкивался с исключениями, выходящими за рамки, из-за которых приложение выходило из строя после его перезапуска или перезагрузки действия.

 java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

//within onBindViewHolder

private ArrayList mainLinearLayouts = new ArrayList();
private ArrayList emotionLinearLayouts = new ArrayList();

mainLinearLayouts.add(holder.mMainLayout);
emotionLinearLayouts.add(holder.mEmotionLayout);

if (position > 0) {
         if (chatList.get(position - 1).getCurrentUser()) {
                    LinearLayout mll = (LinearLayout) mainLinearLayouts.get(position - 1);
                    LinearLayout ell = (LinearLayout) emotionLinearLayouts.get(position - 1);
                    mll.removeView(ell);
                }
            }