2

ユーザーがウェブサイトに記事を投稿できるようにする簡単なアプリを開発しています。

これは、タイトルとテキストの入力と送信ボタンを備えた単純なフォームです。

これを行うために、ArticleFragment という Fragment を内部に持つ FragmentActivity を使用しました。

ユーザーの入力を保存する最良の方法は、フラグメントで onPause() をオーバーライドし、onCreateView() でそれらを復元することであるとどこでも読みました。

@Override
public void onPause() {
    Log.i(TAG, "Pausing fragment");
    Log.i(TAG, "Saving edits");

    // Sauvegarde des saisies
    EditText titreEdit = (EditText) getActivity().findViewById(R.id.titre_saisie);
    EditText texteEdit = (EditText) getActivity().findViewById(R.id.texte_saisie);
    String titre = titreEdit.getText().toString();
    String texte = texteEdit.getText().toString();

    SharedPreferences settings = getActivity().getPreferences(0);
    Editor editor = settings.edit();
    editor.putString("titre", titre);
    editor.putString("texte", texte);
    editor.commit();

    Toast toast = Toast.makeText(getActivity(), R.string.article_enregistre, Toast.LENGTH_SHORT);
    toast.show();

    super.onPause();
}

ご覧のとおり、アクティビティが一時停止されるたびに、トーストが表示され、入力が保存されたことをユーザーに通知します。

それが私が欲しかったものです。ただし、ユーザーが画面の向きを変更するたびに、ポップアップが再び表示され (Activity が一時停止されてから破棄されるため)、これはユーザーを苛立たせる可能性があります。

マニフェストに android:configChanges="orientation" を追加しようとしましたが、これはこの問題に対処する最善の方法ではないと思います。

onSaveInstance() を使用して解決策を作成しようとしましたが、その仕組みがわかりません。onSavedInstance が null の場合もあれば、そうでない場合もあります。

以上のことから、主な問題は、向きの変更と戻るボタンを使用してユーザー入力を保存する最良の方法と、保存したものをどこに復元するかということです。

ありがとうございました!

4

3 に答える 3

0

ユーザーをホームに移動させ、適切なトースト メッセージを表示する任意のボタンの onBackPressed() および onClick で入力値が空であるかどうかを確認します。

于 2012-11-19T09:02:40.790 に答える
0

私はあなたの論理にはあまり従いません。見てみましょう... 2 つの edittext フィールドと保存ボタンがあります。ユーザーが破棄時に画面の向きを変更すると、入力を共有設定またはバンドルに保存できます。ドラフトがあります。ユーザーが戻るボタンを押すと、入力を保存してトーストを表示することもできます。送信を押すと、入力を送信するだけですよね?

于 2012-11-19T09:39:50.170 に答える
0

マニフェスト ファイルに android:configChanges="orientation" を追加します。onConfigurationChanged をオーバーライドします。super.onConfigurationChanged を呼び出す前に、データを保存してください。縦向きと横向きで異なるレイアウト ファイルがある場合は、すべてのビューを削除し、setcontentview を設定して初期化する必要があります ( create で行うのと同じように)。これらすべての後にデータを復元できます。

于 2012-11-19T09:25:28.623 に答える