2013-12-18 34 views
1

我有一個片段發送一個ArrayList,newStyles到它的FragmentActivity,mStyles,然後使用addAll將其清零。我已經使用.size()來檢查數組,並注意source,newStyles在addAll被調用後被清除:爲什麼addAll清除ArrayList從中提取數據?

以下將在調用addAll之前給出newStyles的正確大小,但在它之後爲0大小清除:

public void setStyles(ArrayList<String[][]> newStyles) { 
    Log.d(TAG, "setStyles: mStyles.size() = " + mStyles.size()); 
    Log.d(TAG, "setStyles: newStyles.size() = " + newStyles.size()); 

    mStyles.clear(); 
    mStyles.addAll(newStyles); 

    Log.d(TAG, "setStyles: mStyles.size() = " + mStyles.size()); 
    Log.d(TAG, "setStyles: newStyles.size() = " + newStyles.size()); 
} 

什麼結束了發生的事情是雙方的ArrayList最終通過使用具有尺寸爲0

UPDATE

我解決了它:

mStyles = new ArrayList<String[][]>(newStyles); 

但我還是想知道發生了什麼事情所以這裏的必要信息

下面是活動中:

ArrayList<String[][]> mStyles; 

protected void onCreate(Bundle savedInstanceState) { 
... 
mStyles = new ArrayList<String[][]>(); 
.... 
} 

// Called by StylesFragment to preLoad styles from the file when 
// the Fragment is viewed 
public ArrayList<String[][]> getStylesFromFile() { 

    mStyles.clear(); 
    mStyles.addAll(mTotalsFragment.getStyles()); 

    return mStyles; 
} 

// Called by StylesFragment when changes are made to styles 
public void setStyles(ArrayList<String[][]> newStyles) { 
    Log.d(TAG, "setStyles: mStyles.size() = " + mStyles.size()); 
    Log.d(TAG, "setStyles: newStyles.size() = " + newStyles.size()); 

    mStyles.clear(); 
    mStyles.addAll(newStyles); 

    Log.d(TAG, "setStyles: mStyles.size() = " + mStyles.size()); 
    Log.d(TAG, "setStyles: newStyles.size() = " + newStyles.size()); 
} 

以下是彙總片段中:

ArrayList<String[][]> mStyles; 

public void onActivityCreated(Bundle savedInstanceState) { 
... 
mStyles = new ArrayList<String[][]>(); 
... 
} 

public void loadEstimate() { 
... 
// Do loop here to pull data from a file 
mStyle = ... 
... 
} 

// Called by StylesFragment via Activity 
// to get Loaded data from file 
public ArrayList<String[][]> getStyles() { 

    return mStyles; 
} 

public void saveEstimate() { 
... 
// Get the styles that should be in Activity 
mStyles = ((PagerActivityFragment)getActivity()).getStyles(); 

// Save the file with the new information 
... 
} 

以下是內StylesFragment:

ArrayList<String[][]> mStyles; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
... 
mStyles = new ArrayList<String[][]>(); 
... 
} 

public void onResume() { 
... 
// Pull the styles loaded from the file through Activity 
mStyles = ((PagerActivityFragment)getActivity()).getStylesFromFile(); 
... 
} 

public modifyStyle(stylePos) { 
... 
// Do some stuff here to modify a specific style (String[][]) within the ArryaList 

// Now send changes back to Activity so TotalsFragment can pull it 
// even if this Fragment is not available when file is to be saved 
((PagerActivityFragment)getActivity()).setStyles(mStyles); 
} 
+4

也許mStyles和newStyles指向相同的ArrayList? –

+0

如果我們看到一個完整的程序(儘可能短),我們可以確認,但我打@SašaŠijak是正確的 –

+0

或者你可以通過把'Log.d'行(標籤,「SašaŠijak是正確的:」+ mStyles == newStyles);'末尾 –

回答

0

return mStyles in getStylesFromFile() in Activity is returned the reference to the list mStyles這就是爲什麼兩個指向相同的List。

+0

那麼是否可以安全地說什麼時候使用return,你沒有將變量內部的信息傳遞給變量本身? –

+0

對於對象,是的,但對於基元,它返回值。 – aasu

相關問題