3

MenuItemプログラムの状態に応じて動的に管理するいくつかの とともに、ActionBarSherlock を使用しています。具体的には、のメソッドでMenuItemをインスタンス変数に保存し、後で必要に応じてそれらを表示および/または非表示にできます。ActivityonCreateOptionsMenu()Activity

MenuItemただし、デバイスのローテーションなどの構成変更で変数が失われる可能性があることがわかりました。そのため、必要に応じて、それらを に入れ、次の呼び出しでメカニズムを介して復元するために にParcel渡します。onSaveInstanceState()savedInstanceStateonCreate()

これは、デバイスのローテーションの場合にうまく機能するようです。ただし、ホームボタンを押すと、次のエラーが表示されます。

Unable to marshal value com.actionbarsherlock.internal.view.menu.MenuItemWrapper

違いは何ですか、または修正方法の提案はありますか?ありがとうございました!

アップデート

を使用して簡単な解決策を見つけましたonRetainCustomNonConfigurationInstance()。このメソッドをオーバーライドすることで、Activityが破棄されているときに選択したクラスのオブジェクトを隠しておき、 を使用してそれを取得できますgetLastCustomNonConfigurationInstance()。これは、 s などをいじるよりもはるかに簡単に思えますがParcelable、私の場合はうまくいきます。

しかし、それでも知りたいのですが、なぜ上記のエラーが発生するのonSaveInstanceState()ですか? そして、それは一般的に安全に使用onRetainCustomNonConfigurationInstance()できますか、それとも落とし穴はありますか?

4

0 に答える 0