Обновление TextView во фрагменте при изменении данных RecyclerView - PullRequest
0 голосов
/ 22 мая 2019

В моем фрагменте у меня 2 просмотра. Textview и RecyclerView. Textview по существу отображает текущий размер RecyclerView. Поэтому, когда строка удаляется в классе адаптера, мне нужно соответствующим образом обновить значение TextView.

Строка удаляется успешно при нажатии removeBtn, но мне нужно соответствующим образом обновить TextView во фрагменте.

ФРАГМЕНТ

                titleText.text = "SIZE (" + arrayStringList().size.toString() + ")"
                //...
                //... 
                //Set RecyclerView Adapter
                mRecyclerView.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(context)
                val adapter = MRecyclerView(context!!, arrayStringList)
                mRecyclerView.adapter = adapter

RECYCLERVIEW

holder.removeBtn{ 
   mData.removeAt(position)
   notifyItemRemoved(position)
 }

Есть ли какой-нибудь слушатель, который я могу вставить в свой фрагмент, чтобы определить, когда изменяются данные? Или есть способ отправить данные из рециркуляции обратно во фрагмент, когда нажата removeBtn?

Ответы [ 3 ]

1 голос
/ 22 мая 2019

Создайте интерфейс в классе recyclerView и внедрите этот интерфейс во фрагмент. Как только вы нажмете кнопку удаления, вызовите этот интерфейс. В классе Fragment обновите текстовое представление с adapter.getItemCount.

В адаптере

interface ItemCallback{
    void updateTextView();
}

Этот интерфейс будет реализован в классе фрагментов, где вы можете обновить свой textView с помощью itemCount.

 public class Fragment implements Adapter.ItemCallback{

  @Override
  public void updateTextView() {
   tvTextView.setText(adapter.getItemCount()); // This will return the current item count of adapter
   }
  }
0 голосов
/ 22 мая 2019

"Или есть способ отправить данные из окна повторного просмотра обратно во фрагмент, когда нажата команда removeBtn?" ответ да

Один из подходов состоит в том, чтобы передать вашему адаптеру свой собственный прослушиватель щелчков (интерфейс), таким образом вы можете контролировать щелчок из фрагмента примерно так:

А1) создать интерфейс

public interface ItemTouchListener {

    void onCardClick(View view, int position);

    boolean onCardLongClick(View view, int position);

}

A2) реализовать этот интерфейс в вашем фрагменте

public class YourFragment extends Fragment implements ItemTouchListener

A3) реализовать методы, которые вы создали в своем фрагменте

@Override
public void onCardClick(View view, int position) {
    if (view.getId() == R.id.removeBtn){
       //update your text
    }else{
      //other buttons
    }
}

@Override
public boolean onCardLongClick(View view, int position) {
  if (view.getId() == R.id.removeBtn){
     //update your text
  } else {
    //other buttons
  }
    return true;
}

A4) создайте этот интерфейс в своем адаптере и установите его для своей кнопки

private ItemTouchListener onItemTouchListener;

public YourAdapter(List<Object> list, ItemTouchListener onItemTouchListener) {
    this.onItemTouchListener = onItemTouchListener;
    this.list = list;
}

removeBtn = view.findViewById(R.id.removeBtn);
        removeBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onItemTouchListener.onCardClick(v, getAdapterPosition());
            }
        });
        removeBtn.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                onItemTouchListener.onCardLongClick(view, getAdapterPosition());
                return true;
            }
        });

A5) и теперь, когда вы создаете свой адаптер, он запрашивает ItemTouchListener, который вы можете дать ему, просто передавая «this»

 YourAdapter adapter = new YourAdapter(this);

A6) вы также можете захотеть дать вашему адаптеру метод, подобный getCount, который возвращает размер списка

public int getCount(){
  list.size();
}

и затем вы можете назвать это как myAdapter.getCount

0 голосов
/ 22 мая 2019

Вы можете сделать это через обратный звонок.Создайте интерфейс и внедрите его во фрагмент.И передать ссылку интерфейса на адаптер.Когда вы запускаете событие для удаления элемента из представления переработчика, вызывайте метод интерфейса (который вы реализовали в Activity).И в этом методе обратного вызова вам нужно установить значение для вашего текстового представления.Чтобы установить значение в TextView, вы можете вызвать метод size () и установить значение, которое будет возвращено из него.Например, список, который вы передаете адаптеру: mData .Когда вам перезвонят метод размера звонка по ссылке и установите значение, как указано ниже, код.

titleText.setText(String.valueOf(mData.size())).

Надеюсь, это вам поможет.

ПРИМЕЧАНИЕ: Вам нужновызовите метод String.valueOf, потому что метод size возвращает целочисленное значение, поэтому его необходимо привести .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...