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 に答える
0

array は object であり、メソッド reverseArray では、temp への参照を再割り当てしていることを思い出してください。したがって、同じ object への参照が 2 つ (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 に答える
-1

Java には、オブジェクトを値渡しする機能がありません。配列オブジェクト参照をメソッドに渡し、したがって配列自体を渡します。最善の方法は、配列のコピーを作成し、配列のコピーを渡すことです。

于 2013-10-07T08:36:19.027 に答える