片段自动保存和恢复EditTexts的状态

时间:2014-07-03 12:24:51

标签: android android-fragments bundle

我有一个片段似乎在屏幕旋转配置更改时自动恢复状态。我可以在日志中验证每当屏幕旋转时片段中都会调用onCreatView。尽管调用了applyDefaults(),但当屏幕旋转并调用onCreateView()时,用户所做的草稿条目仍被保留。

我的理解是我必须在onSaveInstanceState()中保存状态并在onCreateView()中恢复它,但似乎并非如此。有人可以解释一下吗?

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Log.d(TAG, "onCreateView()");
    View view = inflater.inflate(R.layout.fragment_email_entry, container, false);

    m_hostNameEditText = (EditText) view.findViewById(R.id.hostNameEditText);
    // set reference for other fields

    applyDefaultsForNewEmailAccount();
    return view;
}

private void applyDefaults() {
    m_hostNameEditText.setText("");
    // set other defaults
}

这可能与我的Activity继承自SingleFragmentActivity这一事实有关,因此它可能会看到该片段已经在视图中。不过,我们知道正在调用Fragment.onCreateView()。

public abstract class SingleFragmentActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.single_fragment_activity);
        FragmentManager fragmentManager = getFragmentManager();
        Fragment fragment = fragmentManager.findFragmentById(R.id.single_frame_container);
        if (fragment == null) {
            fragment = createFragment();
            fragmentManager.beginTransaction()
                    .add(R.id.single_frame_container, fragment)
                    .commit();
        }
    }

    public abstract Fragment createFragment();
}

1 个答案:

答案 0 :(得分:4)

  

就像活动一样,片段会自动保存数据   任何片段通过View组件的id查看Bundle中的组件。   就像在活动中一样,如果你确实实现了   onSaveInstanceState()方法确保添加调用   super.onSaveInstanceState()方法以便保留此自动   保存查看数据功能。

source