2012-06-25 2 views
7

動的に作成されたEditTextをレイアウトに追加しています(onClickボタンメソッド)。画面を回転すると、追加された編集テキストが消えます。どのようにそれらをバンドルに追加して、それらをonSavedInstanceStateメソッドに入れることができますか?または、これを行う別の方法がありますか?私はテキストを保存することができますが、私はそれを回転させると、画面のレイアウトを維持する方法はありますか?ユーザーがボタンを押して5つのEditTextを追加した場合(画面に何かを入力してもしなくても)、画面が回転したときにこのレイアウトを保存する必要があります(私は基本的に私のアプリをダミープルーフする必要があります:))。ビューをバンドルに入れる方法

ありがとうございます!

+1

私はそれを持っていると思います! edittextの文字列をバンドルに保存し、画面が回転したら新しい編集テキストを入力します。あなたは私の記憶を傷つけました。 – TheCommander

答えて

9

(「テキスト1」)で追加したものを手に入れることができます(バンドル保存します)。バンドルに保存することができ、保存する必要があるのは、アクティビティの現在の状態だけです。

動的に作成されたビューを追跡するリストデータ構造またはカウンタ変数を維持できます。また、EditTextの文字列値も保存します。 onCreateでは、ビューとその状態を再現するためにその情報を解釈する必要があります。

+0

どのようにカウンタ変数を作成しますか?私はonClickリスナを持っていません。私はxmlファイルにonClickメソッドを持っています。文字列を配列に保存してから、forループを使用してedittextを作成し、配列要素をインデックス化して文字列を追加できますか? – TheCommander

+0

GoogleはProGuardを介してコード圧縮と難読化を使用することを推奨しているため、(ProGuard構成ファイルのメソッド名を保護しない限り)XMLでイベントハンドラを定義しないでください。コード内でonClickイベントハンドラを設定/作成します。これらの編集テキストをどのように作成しているのか正確には分かりません。これらのEditTextを再作成するには、ファンシー配置が適用されていない場合は、テキスト値を保存し、onCreateのsavedInstanceStateバンドルの文字列配列リストを反復処理するだけです。 – tiguchi

0

ビュー自体は保存する必要がある情報ではありません。代わりに、座標、幅、高さ、値などを保存する必要があります。

1

ビューを保存することはできません。 bundleは単なる名前と値のペアです。もちろん、テキストを保存してから再度レンダリングすることができます。方法はちょうどあなたが言ったことです。

onsaveInsatnceState(bundle save)save.putString( 'text1'、 'bla bla')としてテキストを保存します。もちろん、すべての編集テキストを保存するループが必要です。

はその後oncreatedに

はあなたがsave.getString彼らは、シリアライズ/ parcelableされていないため、バンドルにビューを追加することはできません

+0

私はテキストを保存することができますが、私はそれを回転させると、画面のレイアウトを維持する方法はありますか?ユーザーがボタンを押して5つのEditTextを追加した場合(何かを入力してもしなくても)、画面が回転したときにこのレイアウトを保存する必要があります(私のアプリをダミープルーフする必要があります:))。申し訳ありませんが、私が望んでいたものがあれば、それは明らかです。ありがとう! – TheCommander

+1

心配しないでください。残念ながら、ビューを保存することはできません。この情報を使用して、editTextとテキストの数を保存し、レイアウトを再コンパイルすることができます。私はそれが唯一の解決策だと思う。 – Xenione

0

あなたは、ビューデータをクラスまたはarraylistに保存できます。 あなたのフラグメントアクティビティが再起動するタイミングは、oncreate関数のsaveinstanceステートからデータを取得するよりも長くなります。

この関数は、setRetainInstance(true)を使用します。物事関数を使用した後、あなたのフラグメント活動は破壊されません。

関連する問題