Android: обновление изображения в GridView при сенсорном событии в адаптере

у меня естьGridView и прикрепил к нему адаптер. Адаптер заполняет изображения в сетке. Я поставилsetOnTouchLister вGridView в моемActivity и реализовано только в адаптере. В адаптере у меня естьInteger[] imageIDs который содержит идентификаторы ресурсов всех добавленных изображений иArrayList<ImageSourceObject> imgObjsArr это расширяетImageView & имеет другие свойства.

СейчасonTouch()Я хочу изменить изображение выбранного изображения на другое. Вот мой код: установка адаптера сетки вActivity вonCreate :

        // 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);

АДАПТЕР:

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;
}

Журналы:

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

Журналы говорят, что объект вInteger[] & ArrayList оба обновлены и имеют правильные значения. После всего этого изображение также не обновляется на экране.gridViewResAdap также является объектом сетки, которая передается из действия. Я пробовал звонитьinvalidate() на это тоже, но пока нет результатов. Как по моемуgetView(), Я используюimageIDs, поэтому я сохранил это также обновленным.

ImageSourceObject:

public class ImageSourceObject extends ImageView {

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

Также,onTouch() дает ошибку для вызоваonPerformClick()Я не знаю, куда звонить и зачем звонить. У меня алос не реализованonClickListener в адаптере. Что можно сделать в этом случае и что написать вonClickListener когда все происходит вonTouch().

Можете ли вы помочь мне узнать, почему объект изображения не обновляется и где я ошибаюсь? Я думал, что должен обновить сетку, поэтому также вызвал invalidate (), но безрезультатно.

Любая помощь высоко ценится.

Спасибо

Ответы на вопрос(2)

Ваш ответ на вопрос