2013-12-18 32 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

相关问题