

`Fragment`に`Activity`のインスタンスを渡そうとしており、`newInstance`メソッドでは以下のようにしました。

[code]

        public static DailyFragment newInstance(Activity activity){
            DailyFragment dailyFragment = new DailyFragment();
            Bundle bundle = new Bundle();
            bundle.putSerializable("activity", new Object[]{ activity });
            dailyFragment.setArguments(bundle);
            return dailyFragment;
        }
    
[/code]

そして`Activity`を復元するときは以下のようにしました。

[code]

        (Activity)getArguments().getSerializable("activity")
    
[/code]

しかし「`java.lang.Object[] cannot be cast to android.app.Activity`」とエラーが出てしまいます。  
どうすれば`newInstance`内で`putSerializable`を使って`Activity`を保存して使うことができるでしょうか？  
どなたか分かる方がいれば教えていただきたいです。すみませんが、よろしくお願いします。


CC BY-SA 3.0
2015-03-11T22:31:11.583
7806
2015-04-11T02:05:59.660
5210
question
android fragment
putSerializableでActivityを保存して使いたい


初めまして。  
エラーの内容はObjectの配列はActivityにはキャストできないと出てますね。  
これはできません。ActivityはあくまでObjectの子ですから。

また、Activity自身がSerializableを実装していないのでputSerializableで取得  
はできないと思います。Parcelableも実装していないです。

Activityの何を具体的には保存したいのでしょうか？  
Activityの状態を保存するのでしたら、onSaveInstanceStateで取得できるbundle自身を  
bundleに格納する事もできます。bundleにbundleを入れる事もできますよ。

参考になると嬉しいです。


CC BY-SA 3.0
2015-03-12T01:39:04.960
7809
2015-03-12T01:39:04.960
297
7806
answer


`serialize`出来るのは`Serializable`インターフェースを実装(`implements`)したクラスのみです。  
`Activity`クラスは`Serializable`インターフェースを実装していないため、`putSerializable`できません。  
たとえ、`Activity`が`Serializable`を実装していたとしても、`getSerializable`した時点で別のインスタンスになってしまいます。

なぜ`Activity`のインスタンスが必要なのでしょうか？  
`Fragment`で`getActivity()`するのではダメですか？


CC BY-SA 3.0
2015-03-12T01:48:54.193
7813
2015-03-12T01:48:54.193
8216
7806
answer