我有一个片段发送一个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);'末尾 –