簡體   English   中英

片段自動保存和恢復EditTexts的狀態

[英]Fragment automatically saving and restoring state of EditTexts

我有一個片段,似乎是在屏幕旋轉配置更改時自動恢復狀態。 我可以在日志中驗證每當屏幕旋轉時片段中都會調用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();
}

就像一個活動一樣,一個片段會通過View組件的id自動保存Bundle中任何片段View組件的數據。 就像在活動中一樣,如果你實現了onSaveInstanceState()方法,請確保添加對super.onSaveInstanceState()方法的調用,以便保留View數據功能的這種自動保存。

資源

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM