Android: Bild in GridView bei Berührungsereignis im Adapter aktualisieren

Ich habe einGridView und angeschlossener Adapter dran. Der Adapter füllt die Bilder im Raster. Ich habe gesetztsetOnTouchLister zuGridView in meinemActivity und nur im Adapter implementiert. Im Adapter habe ich einInteger[] imageIDs enthält Ressourcen-IDs aller hinzugefügten Bilder & einArrayList<ImageSourceObject> imgObjsArr das erstreckt sichImageView & hat andere Eigenschaften gesetzt.

JetztonTouch(), Ich möchte das Bild des ausgewählten Bildes in ein anderes ändern. Hier ist mein Code: SEtting Adapter von Grid inActivity imonCreate :

        // Set Objects in Game View
    gameView = (GridView) this.findViewById(R.id.game_gridView);
    gameObjAdapter = new GameObjectsAdapter(this, R.id.game_gridView, null);
    gameView.setAdapter(gameObjAdapter);

ADAPTER:

public class GameObjectsAdapter extends BaseAdapter implements OnTouchListener {
    super();
    mContext = c;
    this.layoutResourceId = layoutResourceId;
    objects = data;
    gridViewResAdap = (GridView) mContext.findViewById(this.layoutResourceId);
    createObjectsArray();
    Log.d("GOA", "Created Objects Array");
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ImageSourceObject imgView;

    if (convertView == null) {
        imgView = new ImageSourceObject(mContext);
        imgView.setLayoutParams(new GridView.LayoutParams(20, 20));
        imgView.getScaleType();
        imgView.setScaleType(ScaleType.FIT_XY);
        imgView.setPadding(0, 0, 0, 0);
    } else {
        imgView = (ImageSourceObject) convertView;
    }

    // Chk status of touched of imgView & set image accordingly
    if (imgView.isTouched())
        imgView.setImage(R.drawable.droid_touched2);
    else 
        imgView.setImage(imageIds[position]);

    return imgView;
}   

@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub

    int action = event.getActionMasked();
    float currentXPos = event.getX();
    float currentYPos = event.getY();
    int position = gridViewResAdap.pointToPosition((int)currentXPos, (int) currentYPos);

    // Key was Pressed Here
    if (action == MotionEvent.ACTION_UP) {
        if (position > 0) {
            // Get the object which is clicked
            ImageSourceObject isb = this.imgObjsArr.get(position);
            Log.d("GA", " Postion ID " + isb.getId() + " [] ID : " + imageIds[position]);

            // Change the status of touched & set image
            isb.setTouched(true);
            isb.setImage(R.drawable.droid_touched2); 

            // Update the ArrayList & Integer[] with this updated obj 
            this.imgObjsArr.set(position, isb);
            imageIds[position] = R.drawable.droid_touched2;
            Log.d("ISB", "++++ Object ID : " + isb.getId() + " [] ID : " + imageIds[position] + " ISB Touched :" + isb.isTouched());

            Toast.makeText(mContext, "Postion Pressed : " + (position+1), 
                Toast.LENGTH_SHORT).show();

            //this.gridViewResAdap.invalidate();
        }

        return true;
    }

    return false;
}

Logs:

02-19 15:19:11.615: D/GA(2046):  Postion ID 2130837556 [] ID : 2130837556
02-19 15:19:11.617: D/ISB(2046): ++++ Object ID : 2130837559 [] ID : 2130837559 ISB Touched :true

Die Protokolle sagen, dass das Objekt inInteger[] & ArrayList Beide sind aktualisiert und haben die richtigen Werte. Nach alledem wird auch das Bild auf dem Bildschirm nicht aktualisiert. DasgridViewResAdap ist auch das Objekt des Gitters, das von der Aktivität übergeben wird. Ich habe versucht, @ anzurufinvalidate() drauf auch, aber noch keine ergebnisse. Wie in meinemgetView(), Ich benutzeimageIDs, also habe ich das auch aktualisiert.

ImageSourceObject:

public class ImageSourceObject extends ImageView {

public void setImage(int resourceId) {
    super.setImageResource(resourceId);
    this.setId(resourceId);
}

Ebenfalls,onTouch() gibt Fehler zum Aufrufen vononPerformClick(), Ich bin nicht sicher, wo ich anrufen soll und warum ich anrufen soll. Ich habe alos nicht implementiertonClickListener im Adapter. Was kann in diesem Fall getan werden und was in @ geschrieben werdeonClickListener wenn Dinge in @ geändert werdonTouch().

Können Sie mir helfen, zu wissen, warum das Bildobjekt nicht aktualisiert wird und wo ich falsch liege? Ich dachte, ich muss das Raster auffrischen, habe also auch invalidate () aufgerufen, aber keine Ergebnisse.

Jede Hilfe wird sehr geschätzt.

Vielen Dan

Antworten auf die Frage(4)

Ihre Antwort auf die Frage