8

これをやりたい

class A extends Activity{
       private class myClass{
       }
       myClass obj = new myClass();

      intent i = new Intent();
      Bundle b = new Bundle();
      b.putParcelable(Constants.Settings, obj); //I get the error The method putParcelable(String, Parcelable) in the type Bundle is not applicable for the arguments (int, A.myClass)
      i.setClass(getApplicationContext(),B.class);
      startActivity(i);  
    }

Parcelableを使用してobjをアクティビティBに渡すにはどうすればよいですか?

4

3 に答える 3

7

クラスを作成し、Serializableを実装します:

private class myClass implements Serializable  {
   }

そして好きなこと:

myClass obj = new myClass();
Intent aActivity = (A.this, B.class);
intent.putExtra("object", obj);

受信側:

myClass myClassObject = getIntent().getSerializableExtra("object");  
于 2012-06-11T06:22:08.117 に答える
6

myClassエラーが示すように、クラス(この場合)にを実装させる必要がありますParcelableのドキュメントをBundle見ると、すべてのputParcelableメソッドはParcelable、何らかの形式でそれらのaまたはコレクションのいずれかを取ります。(名前を付ければ、これは理にかなっています。)したがって、そのメソッドを使用する場合Parcelableは、バンドルに入れるインスタンスが必要です...

もちろん、使用する必要はありませ。代わりにputParcelable実装して、を呼び出すことができます。SerializableputSerializable

于 2012-06-11T06:22:11.563 に答える
2

Parcelableはコードを書くのに苦労しますが、Serializableよりも費用効果があります。以下のリンクをご覧ください-

パーセラブルとシリアライズ可能

于 2013-08-17T16:16:48.727 に答える