我有一個片段發送一個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);
}
也許mStyles和newStyles指向相同的ArrayList? –
如果我們看到一個完整的程序(儘可能短),我們可以確認,但我打@SašaŠijak是正確的 –
或者你可以通過把'Log.d'行(標籤,「SašaŠijak是正確的:」+ mStyles == newStyles);'末尾 –