0

シリアル化に問題があります。

HomeFragment の一部のデータを保持する HomeHolder オブジェクトがあります。HomeHolder は、1 つの String、2 つの String の HashMap の ArrayList、および 2 つの String と 2 つの Drawable を含む 1 つの MediaHolder オブジェクトで構成されます。

デバイスを回転させたときに、HomeHolder に含まれるデータを復元したいと考えています。そこで、HomeHolder と MediaHolder に Serializable インターフェイスを実装しようとしました。Drawable はシリアライズ可能ではないと確信していますが、試してみましょう...

HomeHolder を Serializable オブジェクトとして、HomeFragment を保持するアクティビティの saveInstanceState メソッドの Bundle に入れます (はい、この HomeHolder を HomeFragment の他のフラグメントで使用する必要があるため、アクティビティで保持します)、onRestoreInstanceState で復元します

さて、今度は HomeFragment を回転させて驚きます: うまくいきました!! (理由は聞かないでください)。データは Web から読み込まれるのではなく、アクティビティによって保持されている HomeHolder から復元されます。ここで、新しいアクティビティを起動する ImageView (たとえば) をクリックします。そして、驚いたことに、アプリケーションがクラッシュしました... Mediaholder の Drawable オブジェクトがシリアル化できなくなったようです。

だから私の質問は: Drawable Serializable、NotSerializable、または時々Serializableですか?

(私はあなたにいくつかのコードを与えることができますが、それは役に立ちません: getter/setter と古典的な onSave/onRestore 実装を持つ単なる古典的なオブジェクトです)。

編集: デバッガーで、HomeHolder オブジェクトが回転したり、イメージビューをクリックしたりしたときにまったく同じであることがわかりました。null はありません。

4

1 に答える 1