如何从 recyclerView 适配器中检测回收,以便我可以在它被回收之前执行操作?
How can I detect recycling from within a recyclerView adapter, so I can perform an action before it gets recycled?
我有一个 recyclerview
,其中包含带有 editTexts
的字段。滚动时,由于我使用的某些功能和视图被回收,编辑文本中的数据全部混淆或删除。
如果我可以在视图被回收之前保存我的数据,这可以完全解决。
我怎样才能从适配器内部检测到这种情况?
在 onBindViewHolder() 方法中的视图中设置数据时使用 vh.setIsRecyclable(false); 它会限制你的要回收的视图。
执行此操作的适当方法是为您的 EditText
设置一个 TextWatcher
并将传递给 onTextChanged
的文本保存到您的 RecyclerView
模型并在您正在再次绑定您的视图,但是如果您希望在视图 ID 被回收时执行此操作,则必须重写适配器上的 onViewRecycled
方法:
@Override
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
...
}
请注意,为了在重新创建视图时收到视图回收通知,您还需要为 RecyclerView
设置空适配器。下面是一个使用片段的例子:
@Override
public void onDestroyView() {
super.onDestroyView();
mRecyclerView.setAdapter(null);
}
只需在适配器的 onBindViewHolder
方法中添加以下代码:
viewHolder.setIsRecyclable(false);
因此您永远不会丢失卷轴上的数据。
Android RecyclerView 适配器调用了函数,
onViewAttchedToWindow();
onViewDetachedFromWindow();
onViewRecycled();
使用这个函数的实现。
我有一个 recyclerview
,其中包含带有 editTexts
的字段。滚动时,由于我使用的某些功能和视图被回收,编辑文本中的数据全部混淆或删除。
如果我可以在视图被回收之前保存我的数据,这可以完全解决。
我怎样才能从适配器内部检测到这种情况?
在 onBindViewHolder() 方法中的视图中设置数据时使用 vh.setIsRecyclable(false); 它会限制你的要回收的视图。
执行此操作的适当方法是为您的 EditText
设置一个 TextWatcher
并将传递给 onTextChanged
的文本保存到您的 RecyclerView
模型并在您正在再次绑定您的视图,但是如果您希望在视图 ID 被回收时执行此操作,则必须重写适配器上的 onViewRecycled
方法:
@Override
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
...
}
请注意,为了在重新创建视图时收到视图回收通知,您还需要为 RecyclerView
设置空适配器。下面是一个使用片段的例子:
@Override
public void onDestroyView() {
super.onDestroyView();
mRecyclerView.setAdapter(null);
}
只需在适配器的 onBindViewHolder
方法中添加以下代码:
viewHolder.setIsRecyclable(false);
因此您永远不会丢失卷轴上的数据。
Android RecyclerView 适配器调用了函数,
onViewAttchedToWindow();
onViewDetachedFromWindow();
onViewRecycled();
使用这个函数的实现。