Android: программно изменить изображение в GridView

Я настроил GridView, следуя инструкциям здесь. Теперь я хочу программно изменить одно из изображений (пользователь не щелкает изображение, чтобы изменить его). Как мне это сделать, если я знаю положение изображения в сетке?


person Jeff    schedule 14.08.2015    source источник


Ответы (1)


Внезапно вы можете создавать объекты, которые отображает ваш адаптер. Пусть ваш метод getView() установит ссылку ImageView внутри этого объекта.

После того, как вы это сделаете, вы можете использовать метод getItem() для возврата этого объекта, получить ссылку на ImageView, а затем установить изображение программно.

Если вы используете именно эту реализацию из этого руководства, вы можете использовать ArrayList.

public class ImageAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<ImageView> mImageViewArrayList = new ArrayList<>(mThumbIds.length);

public ImageAdapter(Context c) {
    mContext = c;
} 

public int getCount() { 
    return mThumbIds.length;
} 

public ImageView getItem(int position) {
    return mImageViewArrayList.get(position); 
} 

public long getItemId(int position) {
    return 0; 
} 

// create a new ImageView for each item referenced by the Adapter 
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {
        // if it's not recycled, initialize some attributes 
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else { 
        imageView = (ImageView) convertView;
    } 

    mImageViewArrayList.set(position,imageView);

    imageView.setImageResource(mThumbIds[position]);
    return imageView;
} 

// references to our images 
private Integer[] mThumbIds = {
        R.drawable.sample_2, R.drawable.sample_3,
        R.drawable.sample_4, R.drawable.sample_5,
        R.drawable.sample_6, R.drawable.sample_7,
        R.drawable.sample_0, R.drawable.sample_1,
        R.drawable.sample_2, R.drawable.sample_3,
        R.drawable.sample_4, R.drawable.sample_5,
        R.drawable.sample_6, R.drawable.sample_7,
        R.drawable.sample_0, R.drawable.sample_1,
        R.drawable.sample_2, R.drawable.sample_3,
        R.drawable.sample_4, R.drawable.sample_5,
        R.drawable.sample_6, R.drawable.sample_7
}; 
} 

Затем в своем классе, где вы хотите изменить его программно, сделайте это.

private void setImage(int position, int image){
    mAdapter.getItem(position).setImageResource(image);
}
person hitch.united    schedule 14.08.2015