2012-01-05 6 views
2

私はボタンをクリックしてビューを膨らませているので、ユーザーは好きなだけ多くのビューを追加できます。 1つのアクティビティに戻って、動的に生成されたアクティビティに再度アクセスすると、生成されたすべてのビューがなくなります。私が次の活動に行き、膨張した活動に戻った場合も同様です。私はonSaveInstanceonRestoreSaveInstanceについて知っています。しかし、onSaveInstanceStateのビュー情報をバンドルに入れるにはどうすればいいですか?私のビューはダイナミックに生成されたことに注意してください。ボタン上でクリックしてください。自分のアクティビティの状態を保持する方法を知りたいと思います。 どうやってそれに行きますか?アクティビティ間を行き来するときに動的に生成されたビューのインスタンスを保存する

+0

私はまだ解決策を探しています... –

答えて

3

あなたはViewsの状態を復元するのに役立つ何らかのロジックを実装するべきだと考えています。だから、クラスを設計する必要があります。は、に追加できるように、Viewsのタイプ、ディメンションなどを追加します。このクラスはParcelableを実装する必要があります。

は、だからあなたは、ユーザーが新しい Viewを追加するたび ArrayList<ViewDetail>myViewsはあなたがあなたの myViewsアレイに追加新しい ViewDetailオブジェクトを作成していきます。その後、

そして、あなたのViewsを保存し、それらのオブジェクトを使用してそれらを復元:あなたのアプリケーションは、あなたがあなたがヒープメモリをオフ

を長期保存を提供する必要がnoticemせずに任意の時点で完全に殺されているよう

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    //save your view states 
    outState.putParcelableArrayList("MY_VIEWS",myViews); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    //get the views back... 
    myViews=savedInstanceState.getParcelableArrayList("MY_VIEWS"); 
    //TODO: add the views back to your Activity 
} 
+0

パーセルオブジェクトにビューを書き込むにはどうすればいいですか? –

+0

お返事ありがとうございます、今すぐ試してみましょう。 –

1

アクティビティが終了した場合は、すべてのビューを復元する必要があります(いつでも可能です)。終了後に再度アクティブ化されると、onCreate()メソッド を通過します。これは、アクティビティ状態を復元するのに適切な場所です。

アプリケーション/アクティビティが破棄される前に呼び出されることが保証されているコールバックだけがonPause()です。これは、ビューステートを長期間のオフヒープストレージに保存するのに適しています。

+0

私は戻ったときにダイナミックアクティビティが終了したと確信しています。ユーザーがヒットしたときにアクティビティを終了しない方法はありますか? –

+0

これはメモリの状態によって異なります。メモリが足りない場合は、すぐに再度有効にするために一時停止されます。 (onResume()が呼び出されます)もう一つのケースはincommingコールです - これは優先順位を持ち、アクティビティを強制終了せずに一時停止します。さらに別の原因は、電話機の向きが変更されたときです。明示的に処理しない限り、アクティビティは強制終了され、再起動されます。そしてランチャーは、あなたがロックしようとしているときにあなたの活動をポートレートレイアウトに強制します –

関連する問題