Skip to content Skip to sidebar Skip to footer

Android: Replacing Images In Gridview Array After Onitemclick

I have a grid view that looks roughly like this (each image will be a different in the end): When the user clicks any image in the array, I want that image to change to this: If

Solution 1:

To do this, we need to do two things:

1. Change the drawable of the item when it is clicked. In onItemClick(...), change the drawable for the View that is passed to you. This View will be the same one that you created in getView(...) of your adapter.

2. Make sure that the item is shown with the correct drawable the next time it comes on screen. To do this, keep track of the state of each item. Every time you make a view for the item in getView(...), assign it the correct drawable for its state.


Here is an example. I am assuming ImageAdapter is a subclass of ArrayAdapter. If not, then you will need to modify this code to work with what you are doing.

Put these somewhere:

privatestaticfinalint WHITE = 0;
privatestaticfinalint TEAL = 1;
privatestaticfinalint MAROON = 2;
privateList<Integer> mStates = new ArrayList<Integer>();

This goes in your ImageAdapter:

// Map each state to its graphics.private Map<Integer, Integer> mStateResources = new HashMap<Integer, Integer>();
mStateResources.put(WHITE, R.drawable.white);

publicvoidadd(...) {
    super.add(...);

    // The new item will start as white.
    mStates.add(WHITE);
}

public View getView(int position, View convertView, ViewGroup parent) {
    //ImageView image = ...// Set the correct image for the state of this item.int state = mStates.get(position);
    int resId = mStateResources.get(state);
    image.setImageResource(resId);
}

In your OnItemClickListener:

publicvoidonItemClick(AdapterView<?> parent, View v, int position, long id) {
    // Change the image and state for this item.int nextState;
    switch(mStates.get(position)) {
    case WHITE:
        nextState = TEAL;
        break;
    case TEAL:
        nextState = MAROON;
        break;
    case MAROON:
        nextState = WHITE;
        break;
    }

    // Set the new state and image for this item.
    mStates.put(position, nextState);
    int resId = mStateResources.get(nextState);
    image.setImageResource(resId);
}

Post a Comment for "Android: Replacing Images In Gridview Array After Onitemclick"