在我的片段中,我有2个视图。一个Textview和一个RecyclerView。 Textview本质上显示了RecyclerView的当前大小。因此,当在适配器类中删除一行时,我需要相应地更新TextView的值。
单击removeBtn
后,该行已成功删除,但是我需要相应地更新Fragment中的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
时将数据从recyclerview发送回片段?
答案 0 :(得分:1)
在recyclerView类中创建一个接口,并在fragment中实现该接口。单击删除按钮后,请调用此界面。在Fragment class中,使用adapter.getItemCount更新文本视图。
在适配器中
allow(my_model_instance).to receive(:bar)
此接口将在片段类中实现,您可以在其中使用itemCount更新textView。
interface ItemCallback{
void updateTextView();
}
答案 1 :(得分:0)
您可以通过回叫来做到这一点。创建一个接口并在Fragment上实现。并将接口的引用传递给适配器。当您触发事件以从“回收者”视图中删除项目时,请调用接口方法(您在Activity上实现)。在该回调方法中,您需要将值设置为文本视图。要在TextView上设置值,您可以调用 size()方法,并设置从其返回的值。例如,您要传递给适配器的列表是 mData 。收到回叫时,调用参考上的调用大小方法并按以下代码设置值。
titleText.setText(String.valueOf(mData.size())).
希望这会对您有所帮助。
注意:您需要调用String.valueOf方法,因为size方法返回整数值,因此需要进行强制转换。。
答案 2 :(得分:0)
“或者当单击removeBtn时,是否有办法将数据从recyclerview发送回片段?”答案是肯定的
一种方法是将自己的点击监听器(接口)传递给适配器,这样您就可以控制片段中的点击,例如
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;
}
});
A5),现在当您创建适配器时,它将询问ItemTouchListener,您可以通过传递“ this”来给予它
YourAdapter adapter = new YourAdapter(this);
A6),您可能还希望为适配器提供类似getCount之类的方法,该方法可返回列表大小
public int getCount(){
list.size();
}
然后您可以像myAdapter.getCount
这样称呼它