1

アプリは Gridview に画像を表示します。GridView のアダプターで、使用可能なリソースからランダムに必要な画像の数を生成します。新しいInteger[] imageIDs配列が作成され、それらのリソース ID がこの新しい配列に保存されます。また、この resourceID をImageView を拡張するArrayListカスタム オブジェクトに格納したいと考えています。ImageSourceObjectを使用してimageViewを設定しましたimgObj.setImageResource(imageIDs[i])onTouch()またはメソッドでこのオブジェクトを取得getView()すると、imageView セットの同じリソースを取得することが期待されますが、-1 が取得されます。

setImageResource() を介して ImageSourceObject の ImageView を設定しているときに、ImageSourceObject の getId() を取得しようとすると、ImageView セットの ID を取得する必要があると思います。

コード :

    private void createObjectsArray() {
    int totalObjs = 15;
    Integer[] mThumbIds = {
            R.drawable.droid_1, R.drawable.droid_3,
            R.drawable.droid_2, R.drawable.ic_launcher
    };
    // Create new [] for imageIDs to store the resource ID as generated    
    imageIds = new Integer[totalObjs];
    // Create ArrayList of ImageSourceObject to set image & other proeprties 
    this.imgObjsArr = new ArrayList<ImageSourceObject>();

    Random random = new Random();
    int index;
    // Set Targets 
    for (int i=0; i < totalObjs; i++) {
        index = this.generateRandomNumber(0, (mThumbIds.length - 1), random);
        imageIds[i] = mThumbIds[index];
        ImageSourceObject iso = new ImageSourceObject(mContext);
        iso.setImageResource(imageIds[i]);
        imgObjsArr.add(iso);

        Log.d("GA", "ThumbIDS ID : " + mThumbIds[index] + " ImageIDs  : " + imageIds[i] + " ISO IMG ID : " + iso.getId());
    }
}

このコードのログ:

02-19 12:21:38.780: D/GA(1613): ThumbIDS ID : 2130837557 ImageIDs  : 2130837557 ISO IMG ID : -1

mThumbIDs&imageIDs値の ID が同じであることがわかります。しかしiso、画像を設定した後のオブジェクトの場合も -1 ??

ImageSourceObject のコードは非常にシンプルです。

public class ImageSourceObject extends ImageView {

private boolean touched;
private boolean targetObj;

public ImageSourceObject(Context context) {
    super(context);
    setTouched(false);
    setTargetObj(false); 
}

 .... Rest Getter & Setter methods

リソース ID が に設定されていない理由を教えてくださいImageSourceObject。すべてのリソースで画像setImageResourceImageView保存してから設定しませんか???

どんな助けでも大歓迎です。

ありがとう

4

4 に答える 4

1

指定した id は、ImageSourceObject (Drawable) に入力する画像用であり、ImageSourceObject 自体のものではありません。ID をこの番号に設定する場合は、次のようにする必要があります。

        iso.setImageResource(imageIds[i]);
        iso.setId(imageIds[i]);
于 2015-02-19T07:40:46.110 に答える
1

あなたの場合の ImageSourceObject のようなプログラムで作成されたビューの場合、View.setId(int id) を使用して ID を割り当てる必要があります。

API レベル 17 以上を使用している場合は、View.generateViewId() を使用して適切な値を生成できます。ドキュメントによると:

この値は、R.id の aapt によってビルド時に生成された ID 値と衝突しません。

とにかく、ドキュメントに従って次のことを考慮してください。

識別子は、このビューの階層内で一意である必要はありません。識別子は正の数でなければなりません。

そのため、ID と衝突する可能性があり、Android はそれらを解決して、指定された ID の階層で見つかった最初のコンポーネントを提供します。

于 2015-02-19T07:41:16.510 に答える