2016-08-31 9 views
0

私はArrayListを生成しているフラグメントが1つあります。 ArrayListが生成された後、私はしかし、私はそのたび任意の参照私のfragment-フラグメントに影響を与えずにフラグメントのデータをアクティビティに渡す

public interface sendTheArraylist{ 
    void ArrayList(ArrayList<Song> songArrayList); 
} 

そしてMainActivity-で

@Override 
public void accessArrayList(ArrayList<Song> songArrayList) { 
    this.queueArrayList=songArrayList; 

    queueAdapter =new SongAdapter(this,queueArrayList); 
    .... 
} 

内部インターフェイス

を使用してActivityに送信していますqueueArrayListの変更がMainActivityで行われた場合、そのフラグメントのsongArrayListも影響を受けます。 FragmentArrayListが変更されないようにするにはどうすればよいですか?

+0

http://stackoverflow.com/questions/9343241/passing-data-between-a-fragment-and-its-container-activity/9346844#9346844 –

答えて

1

以下を試してください。

this.queueArrayList.clear(); 
this.queueArrayList.addAll(songArrayList); 

の理由は、あなたがそうあなたも上の影響を与えるだろう、そのリストを変更するたびに、そのリストの参照を渡すインタフェースを使用してもバックsongArrayList

0

の変化を反映して直接queueArrayListへのArrayListを参照しているということですフラグメントリストも。その解決策は、そのリストへの参照を渡すのではなく、新しいリストを作成してそのコピーを作成することです。

あなたはCollections.copy方法を見て試してみて与えることができます:

公共の静的な無効コピー(リストDEST、リストSRC)

コピー1つのリストからすべての要素にします別の操作の後、宛先リスト内のコピーされた各要素の索引は、ソース・リスト内の索引と同じになります。宛先リストは、少なくともソースリストと同じ長さでなければなりません。それより長い場合、宛先リストの残りの要素は影響を受けません。このメソッドは線形時間で実行されます。

パラメータ:dest - 宛先リスト。 src - ソースリスト

ご希望の場合はお手数ですが、活動中にあなたsongArrayListToPass上のあなたの任意の更新は、フラグメントに反映されません。この方法で、あなたのfragment-

ArrayList<Song> songArrayListToPass= new ArrayList<Song>(songArrayList.size()); 
Collections.copy(songArrayListToPass, songArrayList); 
YourActivityRef.sendTheArraylist(songArrayListToPass); 

内部sendTheArraylistを呼び出す前に :ここ

0

は完全なソリューションです。

関連する問題