【问题标题】:How to determine whether View state is being restored如何判断View状态是否正在恢复
【发布时间】:2017-12-26 15:33:31
【问题描述】:

在我的自定义视图中,如果无法恢复某些字段,我想恢复或创建新实例。令人惊讶的是我没有找到答案

示例类

class MyView extends View {
    private Calendar calendar;
    public MyView(Context context) {
        super(context);
        if(!restoring())
            calendar = Calendar.getInstance();
    }

    @Nullable
    @Override
    protected Parcelable onSaveInstanceState() {
        Bundle b = new Bundle();
        b.putParcelable("state", super.onSaveInstanceState());
        b.putLong("calendar", calendar.getTimeInMillis());
        return b;
    }

    @Override
    protected void onRestoreInstanceState(Parcelable state) {
        if (state instanceof Bundle) {
            Bundle b = ((Bundle) state);
            super.onRestoreInstanceState(b.getParcelable("state"));
            calendar = Calendar.getInstance();
            calendar.setTimeInMillis(b.getLong("calendar"));
        }
    }
}

是否可以在自定义视图中进行一些检查以确定视图是否会恢复?

Activity 中有Bundle savedInstanceState 传递给onCreate()

我想过将静态布尔值设为静态布尔值,但这不是可行的方法。

【问题讨论】:

    标签: java android android-view android-custom-view android-lifecycle


    【解决方案1】:

    是否可以在自定义视图中进行一些检查以确定视图是否会恢复?

    View 类中存在这样的 API。

    给你的唯一接缝是onRestoreInstanceState(Parcelable),它将“永远不会以null 状态调用”。因此,如果您最终进入onRestoreInstanceState(),那么您可以假设视图正在恢复。否则它是不是

    【讨论】:

    • 好吧,这很不幸,因为我将不得不重新构建我的逻辑。感谢您的澄清
    猜你喜欢
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多