Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么addAll clear ArrayList从中提取数据?_Java_Android_Arraylist - Fatal编程技术网

Java 为什么addAll clear ArrayList从中提取数据?

Java 为什么addAll clear ArrayList从中提取数据?,java,android,arraylist,Java,Android,Arraylist,我有一个片段将一个ArrayList newStyles发送到它的FragmentActivity mStyles,它被清除,然后使用addAll存储。我已使用.size()检查数组,并注意到在调用addAll后,源newStyles被清除: 以下内容将在调用addAll之前为newStyles提供正确的大小,但在清除addAll之后为0: public void setStyles(ArrayList<String[][]> newStyles) { Log.d(TAG,

我有一个片段将一个ArrayList newStyles发送到它的FragmentActivity mStyles,它被清除,然后使用addAll存储。我已使用.size()检查数组,并注意到在调用addAll后,源newStyles被清除:

以下内容将在调用addAll之前为newStyles提供正确的大小,但在清除addAll之后为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());
}
public void集合样式(ArrayList newStyles){
Log.d(标记,“setStyles:mStyles.size()=”+mStyles.size());
Log.d(标记,“setStyles:newStyles.size()=”+newStyles.size());
mStyles.clear();
mStyles.addAll(newStyles);
Log.d(标记,“setStyles:mStyles.size()=”+mStyles.size());
Log.d(标记,“setStyles:newStyles.size()=”+newStyles.size());
}
最终两个ArrayList的大小都是0

更新

我用以下方法解决了这个问题:

mStyles = new ArrayList<String[][]>(newStyles);
mStyles=newarraylist(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());
}
arraylistmstyles;
创建时受保护的void(Bundle savedInstanceState){
...
mStyles=newarraylist();
....
}
//由StylesFragment调用,以便在
//片段已被查看
公共ArrayList getStylesFromFile(){
mStyles.clear();
mStyles.addAll(mTotalsFragment.getStyles());
返回mStyles;
}
//对样式进行更改时由StylesFragment调用
公共无效设置样式(ArrayList新闻样式){
Log.d(标记,“setStyles:mStyles.size()=”+mStyles.size());
Log.d(标记,“setStyles:newStyles.size()=”+newStyles.size());
mStyles.clear();
mStyles.addAll(newStyles);
Log.d(标记,“setStyles:mStyles.size()=”+mStyles.size());
Log.d(标记,“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
...
}
arraylistmstyles;
已创建ActivityState上的公共无效(Bundle savedInstanceState){
...
mStyles=newarraylist();
...
}
公共空间负荷估算(){
...
//在此处循环以从文件中提取数据
mStyle=。。。
...
}
//由StylesFragment通过活动调用
//从文件中获取加载的数据
公共阵列列表getStyles(){
返回mStyles;
}
公共预算{
...
//获取活动中应包含的样式
mStyles=((PagePractivityFragment)getActivity()).getStyles();
//用新信息保存文件
...
}
StylesFragment中包含以下内容:

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
...
}
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);
}
arraylistmstyles;
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
...
mStyles=newarraylist();
...
}
恢复时公开作废(){
...
//通过“活动”从文件中提取加载的样式
mStyles=((PagePractivityFragment)getActivity()).getStylesFromFile();
...
}
公共修改样式(stylePos){
...
//在此处执行一些操作以修改ArryList中的特定样式(字符串[][])
//现在将更改发送回Activity,以便TotalsFragment可以提取它
//即使要保存文件时此片段不可用
((PagePractivityFragment)getActivity()).setStyles(mStyles);
}

活动中的
getStylesFromFile()
中的
返回mStyles
正在返回对列表的引用
mStyles
,这就是为什么这两个列表指向同一个列表。

可能mStyles和newStyles指向同一个ArrayList?如果我们看到完整的程序(尽可能短),我们可以确认,但我敢打赌@Sašašijak是对的,或者你可以通过把行
Log.d(标签,“Sašašijak是对的:“+mStyles==newStyles)”来确认在末尾hmmm处。我从没想过。我只是想,既然我从一个片段中调用了setStyles,就不会有任何连接。我会尽可能多地发布新闻样式的来源……那么,当使用return时,是否可以安全地说,您不是在变量中传递信息,而是在变量本身中传递信息?对于对象,是的,但对于原语,它返回值。