0

我正在尝试反转位图数组,而不修改源数组。但问题是源数组也正在反转。我做错了什么还是我想以其他方式做?感谢帮助。

private GalleryAdapter galleryAdapter;
private ReverseGalleryAdapter rGalleryAdapter;  

public void onCreate(Bundle savedInstanceState) {
    galleryAdapter = new GalleryAdapter(this, imageThumbnails, imagePaths,
            videoThumbnails, videoPaths);

    imagegrid.setAdapter(galleryAdapter);

    rGalleryAdapter = new ReverseGalleryAdapter(this, reverseBArray(videoThumbnails), reverseSArray(videoPaths),
            reverseBArray(imageThumbnails), reverseSArray(imagePaths));

    imagegrid2.setAdapter(rGalleryAdapter);
}

private Bitmap[] reverseBArray(Bitmap[] v){
    Bitmap[] bTemp;
    bTemp = v;
    int len = bTemp.length;
    Bitmap temp;
    for (int i = 0; i < len/2; i++)
    {
        temp = bTemp[i];
        bTemp[i] = bTemp[len-1 - i];
        bTemp[len-1 - i] = temp;
    }
    return bTemp;
}

private String[] reverseSArray(String[] s){
    String[] sTemp;
    sTemp =s;
    int len = sTemp.length;
    String temp;
    for (int i = 0; i < len/2; i++)
    {
        temp = sTemp[i];
        sTemp[i] = sTemp[len-1 - i];
        sTemp[len-1 - i] = temp;
    }
    return sTemp;
}
4

5 回答 5

3
 Bitmap[] bTemp;
 bTemp = v;

当你这样做时,defenitley 都引用同一个数组,因为你没有在那里创建一个新数组。

同样的事情也发生在这里

  String[] sTemp;
    sTemp =s;

可能的解决方案:复制数组Java(建议阅读可能的方式后选择)。

我来自官方文档的建议:(请参阅复制数组部分)

System 类有一个 arraycopy() 方法,您可以使用该方法有效地将数据从一个数组复制到另一个数组:

public static void arraycopy(Object src, int srcPos,
                             Object dest, int destPos, int length)
于 2013-10-07T08:35:05.973 回答
2

bTemp = v;你所指的相同Object

您可以在您的情况下使用该clone()方法来制作数组的副本:

bTemp = v.clone();

然后你可以自由修改它并返回它。

于 2013-10-07T08:38:20.410 回答
0

记住数组是对象,在方法 reverseArray 中,您正在重新分配对 temp 的引用,所以现在您有 2 个对同一 object 的引用(v 和 temp)。进行下面提到的适当更改

private Bitmap[] reverseBArray(Bitmap[] v){
    Bitmap[] bTemp;
    bTemp = v; // CHANGE IT to bTemp = new Bitmap[v.length]
    int len = bTemp.length;
    Bitmap temp;
    for (int i = 0; i < len/2; i++)
    {
        temp = bTemp[i];
        bTemp[i] = bTemp[len-1 - i];
        bTemp[len-1 - i] = temp;
    }
    return bTemp;
}
于 2013-10-07T08:36:34.840 回答
0

我认为您想保留两个对象吗?如果是这样,我认为您可以使用 clone() 方法并将克隆的对象传递给该方法,而无需修改原始对象

于 2013-10-07T08:37:02.500 回答
-1

Java 没有按值传递对象。您将数组对象引用传递给您的方法,因此数组本身。最好的方法是创建数组的副本并传递数组的副本。

于 2013-10-07T08:36:19.027 回答