Android 当RecyclerView';s数据更改

Android 当RecyclerView';s数据更改,android,kotlin,android-recyclerview,Android,Kotlin,Android Recyclerview,在我的片段中,我有两个视图。文本视图和回收视图。Textview基本上显示RecyclerView的当前大小。因此,当adapter类中删除一行时,我需要相应地更新TextView的值 单击removeBtn时,该行被成功删除,但我需要相应地更新片段中的文本视图 片段 titleText.text = "SIZE (" + arrayStringList().size.toString() + ")" //...

在我的片段中,我有两个视图。文本视图和回收视图。Textview基本上显示RecyclerView的当前大小。因此,当adapter类中删除一行时,我需要相应地更新TextView的值

单击
removeBtn
时,该行被成功删除,但我需要相应地更新片段中的文本视图

片段

                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
时,是否有方法将数据从recyclerview发送回片段?

在recyclerview类中创建一个接口,并在片段中实现该接口。单击移除按钮后,调用此界面。在Fragment类中,使用adapter.getItemCount更新文本视图

输入适配器

interface ItemCallback{
    void updateTextView();
}
这个接口将在fragment类中实现,您可以在其中使用itemCount更新textView

 public class Fragment implements Adapter.ItemCallback{

  @Override
  public void updateTextView() {
   tvTextView.setText(adapter.getItemCount()); // This will return the current item count of adapter
   }
  }

您可以通过回拨来完成此操作。制作一个接口并在片段上实现它。并将接口的引用传递给适配器。当您触发从回收器视图中删除项目的事件时,请调用接口方法(您在活动中实现的)。在该回调方法中,需要将值设置为文本视图。要在TextView上设置值,可以调用size()方法并设置从中返回的值。例如,传递给适配器的列表是mData。当您在引用上获得callback时,调用size方法并设置如下代码所述的值

titleText.setText(String.valueOf(mData.size())).
希望这对你有帮助

注意:您需要调用String.valueOf方法,因为size方法返回整数值,因此需要强制转换它。

“或者在单击removeBtn时有没有办法将数据从recyclerview发送回片段?”答案是肯定的

一种方法是将适配器传递给您自己的click listener(一个接口),这样您就可以控制来自片段的click,比如

A1)创建一个接口

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;
            }
        });
A6)您可能还希望为适配器提供一个类似getCount的方法,该方法返回列表大小

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

然后你可以像myAdapter一样调用它。getCount

刚刚意识到你在使用kotlin,所以我的答案可能不太合适,但你可以很容易地调整它
public int getCount(){
  list.size();
}