2017-03-07 14 views
0

カスタムクラスのArrayListをあるエンティティから別のエンティティに「転送」する必要があります。 Parcelableインターフェイスを実装する必要があることを知っています。ArrayListとParcelable

これは私のカスタムクラスです。

//This is sportsMap: ArrayList<cSportsList> sportsMap = new ArrayList<cSportsList>(); 
Intent intent = new Intent(getApplicationContext(),WhatSportActivity.class); 
intent.putParcelableArrayListExtra("sportsMap", (ArrayList<? extends Parcelable>) sportsMap); //I have tried with ArrayList<cSportsList> too. 
this.startActivity(intent); 

「から」

public class cSportsList implements Parcelable { 
    boolean checked; 
    String name; 

    cSportsList(boolean check, String name_) { 
     checked = check; 
     name = name_; 
    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     //Non posso passare un booleano e non posso fare il cast boolean -> int 
     if (checked) { 
      dest.writeInt(1); 
     } 
     else dest.writeInt(0); 
     dest.writeString(name); 
    } 

    public static final Parcelable.Creator<cSportsList> CREATOR = new Parcelable.Creator<cSportsList>() { 
     public cSportsList createFromParcel(Parcel in) { 
      return new cSportsList(in); 
     } 

     public cSportsList[] newArray(int size) { 
      return new cSportsList[size]; 
     } 
    }; 

    private cSportsList(Parcel in) { 
     if (in.readInt() == 1) { 
      checked = true; 
     } 
     else { 
      checked = false; 
     } 
     name = in.readString(); 


    } 
} 

そして、これは実体のコードであり、これは実体のコードである

final Intent srcIntent = getIntent(); 
ArrayList<cSportsList> sportsMap = srcIntent.getParcelableExtra("sportsMap"); 

「を」問題がある:エンティティに「へ」 sportsMapがnullです。 "writeToParcel"と "cSportsList(Parcelable in)"関数で "breakpoint"を設定すると、コードが両方の関数に対して実行されることがわかります。

ここで私のエラー

ありがとうございました。 M.

+0

** getParcelableExtra **を** getParcelableArrayListExtra **に置き換えます。 –

答えて

0

使用以下のコード

sportsMap = srcIntent.g etParcelableArrayListExtra( "sportsMap");

1

あなたが読んでいる間は使用し、

intent.putParcelableArrayListExtra("sportsMap", sportsMap); 

コードの下にテントの使用に置くにとの意図から、それを読むために

srcIntent.getParcelableArrayListExtra("sportsMap"); 

を使用する必要が

ArrayList<cSportsList> sportsMap = srcIntent.getParcelableArrayListExtra("sportsMap"); 

Pass ArrayList<? implements Parcelable> to Activity

あなたが使用する必要があります
0

で同様のソリューションを読む:

ArrayList<cSportsList> sportsMap = srcIntent.getParcelableArrayListExtra("sportsMap"); 
0

あなたも同じのためのシリアル化を使用することができます。取得のための

intent.putExtra("LIST",list);

:プットのための

public class cSportsList implements Serializable

(ArrayList<>)intent.getSerializableExtra("LIST");

+0

私はParcelableがSerializeより優れていると読んでいます。しかし、しかし:ありがとう。 – ZioBudda

0

のArrayListを渡す代わりに、このようにそれをキャストしてみてください。WhatSportActivityで

Intent intent = new Intent(getApplicationContext(),WhatSportActivity.class); 
intent.putParcelableArrayListExtra("sportsMap", sportsMap); 
     startActivity(intent); 

final Intent srcIntent = getIntent(); 
ArrayList<cSportsList> sportsMap = srcIntent.getParcelableExtra("sportsMap"); 

それでも問題が解決しない場合は、それとして「Parceable」プラグインを使用してParceableを実装してみてくださいParceableリストを使用する際のエラーを減らします。

関連する問題