基本的にアクティビティにフォームがあり、それを保存する必要があります。xmlファイルとして保存します。今onPause()
は呼び出されるたびに保存していますが、それは適切な状況ではないと思います。私の質問は、いつ (アクティビティのライフサイクルで) フォームを xml ファイルとして保存する必要があるかということです。もう 1 つのことは、ある種のフォーム検証もセットアップする必要があるということです。
6 に答える
それは、達成しようとしている動作に大きく依存します。onPause() での保存はまったく問題ありませんが、フォーム入力が変更されたとき (変更リスナーを設定することによって) または検証が成功したときなど、より頻繁に保存することもできます。
検証のために、次のようなことができます。
public class YourTextWatcher implements TextWatcher {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
@Override
public void afterTextChanged(Editable editable) {
//... validation goes here
}
}
次に、次のように設定します。
yourEditText.addTextChangedListener(new YourTextWatcher());
すべてはあなたが望むものに依存します。
フォームをxmlファイルに保存する必要があると思いますonSaveInstanseState
。
onPause() はおそらくデータを保存するのに最適な時期です。それ以降はデータが破棄されないことを保証できないからです。ライフサイクルの他のオプションは、通常は問題ない onStop() ですが、 onPause() が「不適切...」である理由はわかりません。
おそらく、編集するたびにデータを保存する必要があります。これが、ユーザーにとって最も適切で安全な場合があります...
また、これは私が使用するフォーム検証ライブラリで、非常に直感的に使用でき、ルールの設定に非常に適しています: Android Saripaar。(インストールも簡単です。jarをlibsフォルダーにドロップするだけです)
http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycleを参照してください
メソッド onSaveInstanceState(Bundle) は、アクティビティをそのようなバックグラウンド状態にする前に呼び出されます。これにより、アクティビティの動的インスタンス状態を指定されたバンドルに保存し、後でアクティビティが必要な場合に onCreate(Bundle) で受け取ることができます。作り直した
でonPause
適切な時間です。アクティビティが表示されなくなるたびに一時停止され、保存されます。
設定を保存するには、SharedPreferences
またはカスタム形式 (を使用していますXML
) を使用できます。SharedPreferences
本当に使いやすいので気に入っています。
フォームを onPause() に保存するのが適切なようです。
以下のアンドロイド開発者ドキュメントからの抽出はそれをサポートしています:
アクティビティの一時停止 システムがアクティビティに対して onPause() を呼び出す場合、技術的には、アクティビティがまだ部分的に表示されていることを意味しますが、ほとんどの場合、ユーザーがアクティビティを離れ、すぐに停止状態になることを示しています。通常は、 onPause() コールバックを次の目的で使用する必要があります。
CPU を消費する可能性のある 1 ストップ アニメーションまたはその他の進行中のアクション。
2-保存されていない変更をコミットしますが、ユーザーが離れるときにそのような変更が永続的に保存されることを期待している場合のみ (下書きメールなど)。
3- ブロードキャスト レシーバー、センサーへのハンドル (GPS など) などのシステム リソース、またはアクティビティが一時停止され、ユーザーがそれらを必要としない間、バッテリーの寿命に影響を与える可能性のあるリソースを解放します。
フォームの検証に関する限り、ユーザーが必要な値を入力したことを確認したい場合は、それを行うことができます。