在CustomView中保存TextView和Spinner的状态

时间:2013-12-04 23:28:56

标签: android

我有3个自定义视图。 第一个效果很好。当我启动一个intent并返回用户输入的任何内容时,它包含一个EditText。

第二个包含TextView,第三个包含一个Spinner。当我启动我的意图并返回时,它们不会保存。

我认为知道如何在我的自定义视图中使用onSaveInstanceState和onRestoreInstanceState来保存数据,但是当包含自定义视图的活动未被杀死(意味着它只是暂停)时,我不会调用返回onRestoreInstanceState。

当我需要保存时,这就是我在自定义视图中调用的内容。

    @Override
public Parcelable onSaveInstanceState() {
    textValue = editText.getText().toString();
    Bundle bundle = new Bundle();
    bundle.putParcelable("instanceState", super.onSaveInstanceState());
    bundle.putString(TEXT_VALUE_KEY, this.textValue);

    return bundle;
}

@Override
public void onRestoreInstanceState(Parcelable state) {
    if (state instanceof Bundle) {
        Bundle bundle = (Bundle) state;
        textValue = bundle.getString(TEXT_VALUE_KEY);
        editText.setText(textValue);
        super.onRestoreInstanceState(bundle.getParcelable("instanceState"));
        return;
    }

    super.onRestoreInstanceState(state);
}

我不确定我应该做什么,因为没有调用onRestoreInstanceState。我认为EditText customView可以工作,因为默认的android行为会暂时保存它们,但它不会保存微调器或TextView。

1 个答案:

答案 0 :(得分:0)

您应该更改onCreate()方法,以便检查Activity是否已经调用过这样的onSavedInstanceState

@Override
public void onCreate(Bundle savedInstanceState) {
    if(savedInstanceState == null) {
        // The activity haven't called onSavedInstanceState(), which means you should initialize your objects and UI here
    }
    else {
        // Whatever states you saved onSavedInstanceState() are stored in savedInstaceState, so use them to reconstruct your customViews
    }
}