2011-02-02 10 views
1

私は現在、次のような動作をするアプリケーションを開発中です: アクティビティの1つで、ユーザは異なるアイテムをリストに選択できます。それをしながら、彼は写真を撮り、それを保存し、以前の活動に戻ることができるはずです。Android - 新しいアクティビティを開始するとアクティビティの状態を保存します

私は次の問題を抱えています:写真を撮った後にユーザーがアクティビティに戻ると、進行状況(基本的には選択した項目)が失われます。

あなたの現在の状態を保存するために私のアクティビティでアンドロイド:launchMode = "singleInstance"(singleTaskと同様に)とandroid:alwaysRetainTaskState = "true"を使用しようとしました(そして、何か他のことをして、後でそれに戻ってくる)。私はFLAG_ACTIVITY_NEW_TASKでACTION_IMAGE_CAPTUREインテントをランチングして、同じ動作をシミュレートしようとしました(私の心のどこかで、ホーム画面からピクチャのアクティビティをランチするのと同じであるはずだと思いました)。私はstartActivityforResultを使って絵のアクティビティを昼食しようとしましたが、何とか自分のアクティビティが失われることはないが効果は残っているという希望を持っていました。

私はBundle savedInstanceStateを使用して、Create(etc)のonPause、onResumeをオーバーライドして状態を手動で保存して復元することができますが、実際にはシリアル化が容易ではないカスタムコンポーネントには、それを避けるのが好きです。

まあ私はalwaysRetainTaskStateマニフェスト属性と同じ動作をどのように再現できますか?または、とにかく私の活動の状態を簡単に保存することができますか?または私は間違って何をしている、明白な行方不明?

ありがとうございます!

答えて

4

は私が手動で(など)を作成の上、保存してonPause、onResumeをオーバーライドすることで状態を復元するためにバンドルsavedInstanceStateを使用することができます知っているが、簡単に直列化可能でないカスタムコンポーネント内のデータの実際の多くがそう、そこにあります私はそれを避けたいです。

あなたが「好きな」ことはそれほど重要ではありません。設定の変更(たとえば、ポートレートからランドスケープへの切り替え)を処理するには、このコードが必要です。 onSaveInstanceState()onRestoreInstanceState()を実装してから、前の段落にある不適切なハッキングのすべてを削除してください(例:singleInstancealwaysRetainTaskState)。

+0

明らかに、私が好きなのは、アプリケーションの要求事項によって決まります。それらの "不公平な"ハッキングについて、多分私はポイントを見逃しているが、なぜ彼らは不十分であろうか?彼らは避けるべきことが好きですか?私にはきれいに見えますが、もう一度、多少の情報が欠けているかもしれません。ホームスクリーンやアプリケーションに戻ったときに私が望む動作を得ることができれば、私の活動からアプリケーションを起動すれば、同じ種類のものを見つけることができると思うのは本当に悪いですか? – Ours

+0

@Ours: "彼らは避けるべきことが好きですか?" - ドキュメントでは、 'singleInstance'は"ほとんどのアプリケーションには適切ではない "と明示的に述べられています。引用符で囲まれた部分は赤で強調表示されています。 'alwaysRetainTaskState =" true "'は意図した目的には問題ありませんが、インスタンス状態を適切に保存するための何らかの万能薬ではありません。 – CommonsWare

+0

私の場合はそれが適切ではないというわけではありません。そしてそのすべてが私の問題を解決するわけではありません。とにかく、あなたの答えとアドバイスに感謝します。 – Ours

関連する問題