如何从 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();

使用这个函数的实现。