我一直坚持非常简单的事情 - 适配器更新。
我有带有 Adapter1 的片段,其中创建 N 个项目(垂直 RecyclerView)。每个项目都是 Adapter2,其中有 NN 个项目(水平 RecyclerView)。当滚动 Adapter2 时,我在 Fragment 的方法中为 Adapter2 加载更多项目。
假设这是 Adapter2 中的代码:
// loading more items for Adapter2
if(position == getItemCount() - 1){
mFragment.loadMore(arg1, arg2, arg3);
}
这是来自 Fragment 的代码:
public void loadMoreModule(args){
ExecutorService executor = Executors.newSingleThreadExecutor();
Handler handler = new Handler(Looper.getMainLooper());
executor.execute(() -> {
// background work here
downloadData(arg1, arg2, arg3);
handler.post(() -> {
// UI Thread work here
Adapter1.notifyDataSetChanged();
Adapter1.RecyclerViewForAdapter2Item.scrollTo(position);
});
});
}
scrollTo()
就像我理解在 notifyDataSetChanged()
或 notifyItemRangeChanged(start, size)
之前执行一样,所以当加载新数据时我遇到了问题 - 默认情况下 RecyclerViewForAdapter2Item
滚动到第一项。
适配器1示例代码:
Adapter1 {
private Adapter2 adapter2;
onBindViewHolder(){
adapter2 = new Adapter2(args);
}
}
加载的数据和
position
的 scrollTo()
具有正确的值。
由于使用后端 API 时出现一些问题,我必须更新整个 Adapter1 并尝试滚动。我无法仅更新 Adapter2 项目。
应该重做 API 工作,以便我可以更新 Adapter2 或者我现在可以以某种方式更新它?