2016-03-24 2 views
2

私はArraylistのカスタムオブジェクトを持っています。私は1つのjavaファイルから別のjavaファイルに渡そうとしています。私はputExtraメソッドとParcelableオプションを試しました。私はParcelableを理解できません。ここカスタムオブジェクトのarraylistをあるJavaクラスから別のJavaクラスに渡すにはどうすればよいですか?

public class AddValues implements Serializable{ 
    public int id; 
    String value; 

    public AddValues(int id, String value) 
    { 
     this.id = id; 
     this.value = value; 
    } 

    @Override 
    public String toString() { 
     String result = "id = "+id+","+" value = "+value; 
     return result; 
    } 

    public int getid() 
    { 
     return this.id; 
    } 

    public String getvalue() 
    { 
     return this.value; 
    } 
} 

そしてArrayList送信するために私のコードです:ここで

Intent intent = new Intent(BluetoothLeService.this,HomePageFragment.class); 
intent.putExtra("id", data_id); 
intent.putExtra("value", list); 

"リスト" はArrayListを指し

は、ここに私のカスタムオブジェクトです。彼らは同じ目的を果たすものの

+0

問題は何ですか?インテントから 'list'を取るコードを表示します。 –

答えて

3

SerializableParcelableは、同じものではありません。このpostには、Parcelableオブジェクトの例が含まれています。

writeToParcelAddValues(Parcel in)のメソッドだけを変更して、作成するすべてのParcelableオブジェクトを使用するパターンに従ってください。 writeToParcel次いでintstring書き込む場合、これらの2つの方法は、お互いを反映する必要があり、コンストラクタはint次いでstring

Parcelable

public class AddValues implements Parcelable{ 
    private int id; 
    private String value; 

    // Constructor 
    public AddValues (int id, String value){ 
     this.id = id; 
     this.value= value; 
    } 

    // Parcelling part 
    public AddValues (Parcel in){ 
     this.id = in.readInt(); 
     this.value= in.readString(); 
    } 

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

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeInt(id); 
     dest.writeString(value); 
    } 

    public final Parcelable.Creator CREATOR = new Parcelable.Creator() { 
     public AddValues createFromParcel(Parcel in) { 
      return new AddValues(in); 
     } 

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

}

意図にリストの追加を読んでください今

シンプルである必要があり、余分なさておき、あなたがAddValuesオブジェクトを作成するのではなく、Pair<Integer, String>オブジェクトを使用できるように一覧余分

ArrayList<AddValue> list = new ArrayList<>(); 
Intent intent = new Intent(BluetoothLeService.this,HomePageFragment.class); 
intent.putExtra("arg_key", list); 

ゲットリスト余分

ArrayList<AddValues> list = (ArrayList<AddValues>) intent.getSerializableExtra("arg_key"); 

を入れてください。これは答えには影響しませんが、知っているといいかもしれません。

+0

ありがとうKevin.When私はintent.putExtraメソッドを渡すと、エラーを返します。エラー:(220、74)エラー:互換性のない型:リストはArrayList <? Parcelable> –

+0

いいえ私は自分の答えを更新し、その中に2つの問題が見つかりました。 'List'は' Serializable'ではなく、Parcelableクラスに小さな変更があるので使用できません。 – Kevin

+0

申し訳ありませんが、応答を待っています。ありがとう=) –

0

putExtra("key", Serializable value)()のメソッドを使用して、目的のオブジェクトインスタンスをIntent#putExtra()メソッドで渡すことができます。これは既にここで行っています。

Intent intent = new Intent(BluetoothLeService.this,HomePageFragment.class); 
intent.putExtra("id", data_id); 
intent.putExtra("value", list); 

このデータを他のアクティビティで取得するには、getSerializableExtra("key")メソッドを使用する必要があります。

list = getIntent().getSerializableExtra("value"); 

Parcelableを使用する場合は、@kevinsの回答を参照してください。

0

また、データ・ホルダー・クラスを使用することができます。..

public class DataHolder { 

    private ArrayList<String> data; 
    public ArrayList<String> getData() {return data;} 

    public void setData(ArrayList<String[]> data) { 
     this.data = data; 
    } 

    private static final DataHolder holder = new DataHolder(); 

    public static DataHolder getInstance() { 
     return holder; 
    } 
} 

そして、あなたは、これは文字列のArrayListのためのケースである(注)

new DataHolder.getInstance().setData(data); 

データを設定することができます同様に

ArrayList<String> data = DataHolder.getInstance().getData(); 

を呼び出すことができ、データを取得する。.. それを交換してくださいあなたのArrayList型で。

関連する問題