gpt4 book ai didi

android - 在我滚动之前,RecyclerView 不会更新 child

转载 作者:太空宇宙 更新时间:2023-11-03 13:09:27 25 4
gpt4 key购买 nike

我想我已经阅读了几乎所有类似 SO 问题的所有答案,而且没有一个似乎对我有用。这让我抓狂,我在这上面花了太多时间。

我正在实现一个RecyclerView here而且我不能为我的生活更新它的 child 。发生的情况是,在我更新后屏幕上没有任何变化,除非我开始滚动。一旦我滚动,它就会完美地更新。

这是我的代码:

public void updateDataAtIndex(final int indexToUpdate, ReadableMap updatedChild) {
if (updatedChild != null) {
if (this.data != null && this.data.size() > indexToUpdate) {
this.data.set(indexToUpdate, updatedChild);
final SPAdapter self = this;
new Handler(Looper.getMainLooper()).post(new Runnable() {
public void run() {
System.out.println("\n@@@@@@@@@@@@@@@@@ Updating: "+indexToUpdate);
self.notifyItemChanged(indexToUpdate);
}
});
}
}
}

这是完整的适配器: https://github.com/SudoPlz/react-native-synchronous-list/blob/master/lib/android/src/main/java/com/sudoplz/rnsynchronouslistmanager/Views/List/SPAdapter.java#L109

最佳答案

那是一个 react-native 问题¯\_(ツ)_/¯

我已经通过像这样拦截 requestLayout 解决了这个问题:

protected boolean mRequestedLayout = false;

@Override
public void requestLayout() {
super.requestLayout();
// We need to intercept this method because if we don't our children will never update
// Check https://stackoverflow.com/questions/49371866/recyclerview-wont-update-child-until-i-scroll
if (!mRequestedLayout) {
mRequestedLayout = true;
this.post(new Runnable() {
@SuppressLint("WrongCall")
@Override
public void run() {
mRequestedLayout = false;
layout(getLeft(), getTop(), getRight(), getBottom());
onLayout(false, getLeft(), getTop(), getRight(), getBottom());
}
});
}
}

终于成功了归功于this发现解决方法的无名英雄。

关于android - 在我滚动之前,RecyclerView 不会更新 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49371866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com