gpt4 book ai didi

android - onRestoreInstanceState - Android View 生命周期

转载 作者:行者123 更新时间:2023-11-30 01:31:55 25 4
gpt4 key购买 nike

我有一个名为 RouteAutofillControl 的自定义 View (组)类,它基本上是一个 EditText,其中填充了从我当前位置解析的地址。 AsyncTask 在 View 构造函数中启动,完成后我在成员变量中记得任务已完成。

我还在配置更改时实现了状态保存,并且它有效。

我的问题是,在调用 View 构造函数时 taskCompleted 成员变量尚未保留,因此 AsyncTask 再次启动。

所以我在 View 生命周期中寻找一种在 onRestoreInstanceState 之后调用的方法。

以下是 View 中的重要部分:

public class RouteAutofillControl extends LinearLayout {
private boolean taskCompleted;

public RouteAutofillControl(Context context, AttributeSet attrs, int defStyle) {
if(!taskCompleted) {
new FillRouteTask(location).execute();
}
}

@Override
public Parcelable onSaveInstanceState() {
final Parcelable superState = super.onSaveInstanceState();
SavedState savedState = new SavedState(superState);
savedState.taskCompleted = taskCompleted;
savedState.resolvedAddress = resolvedAddress;
return savedState;
}

@Override
public void onRestoreInstanceState(Parcelable state) {
Log.d(TAG, "onRestoreInstanceState");
SavedState savedState = (SavedState) state;
super.onRestoreInstanceState(savedState.getSuperState());
taskCompleted = savedState.taskCompleted;
resolvedAddress = savedState.resolvedAddress;
}
}

我没有找到任何关于 View 生命周期方法的信息,我感谢任何帮助或建议让它变得更好,干杯 :)

最佳答案

That不是最近,但我认为这在很大程度上仍然是正确的。

这里要保留的是 onAttachedToWindow 在父进程的 addView 进程之后被调用,这将调用其子进程的 restoreState 方法。

所以在您的情况下,我会将我的任务移至此回调:

@Override
public void onAttachedToWindow() {
if(!taskCompleted) {
new FillRouteTask(location).execute();
}
}

关于android - onRestoreInstanceState - Android View 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35624011/

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