Как выбрать, какие ресурсы изображения будут отображаться в виде сетки? - PullRequest
0 голосов
/ 19 июля 2011

Я начал с примера кода Google для Grid View, но как выбрать, какие изображения будут отображаться?Скажем, однажды я хотел, чтобы eq1 и eq4 показывались, но в другой раз я хотел, чтобы eq3, eq 6 и eq12 появились, что мне нужно сделать с кодом?Массив Integer содержит некоторые целые числа из другой части приложения, которые не всегда будут одинаковыми, и я пытаюсь привести их в соответствие с тем, какие изображения находятся в Grid.

public class ImageAdapter extends BaseAdapter {
private Context mContext;
private int length;
private Integer[] choices;

public ImageAdapter(Context c, int inLength, Integer[] inChoices) {
    mContext = c;
    length = inLength;
    choices = inChoices;
}

public int getCount() {
    return length;
}

public Object getItem(int position) {
    return null;
}

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(200, 50));
        imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }

    imageView.setImageResource(mThumbIds[position]);

    return imageView;

}

// references to our images
private Integer[] mThumbIds = {
        R.drawable.eq1, R.drawable.eq2,
        R.drawable.eq3, R.drawable.eq4,
        R.drawable.eq5, R.drawable.eq6,
        R.drawable.eq7, R.drawable.eq8,
        R.drawable.eq9, R.drawable.eq10,
        R.drawable.eq11, R.drawable.eq12,
        R.drawable.eq13, R.drawable.eq14,
        R.drawable.eq15, R.drawable.eq16,
        R.drawable.eq17, R.drawable.eq18,
        R.drawable.eq19, R.drawable.eq20,
        R.drawable.eq21, R.drawable.eq22
};

}

1 Ответ

0 голосов
/ 19 июля 2011

Это работает так, что представление вызывает ImageAdapter.getCount, чтобы определить, сколько изображений должно быть отображено, а затем вызывает ImageAdapter.getView для каждой позиции (0, 1, ..., до getCount()-1).Так что если вы просто хотите показать eq1 и eq4, getCount должен вернуть 2, а затем в getView вам придется заменить строку

imageView.setImageResource(mThumbIds[position]);

чем-то, что знает, какие mThumbIds элементы выхочу.Это действительно зависит от того, как вы решаете, какие изображения должны отображаться.Часто вы просто воссоздаете mThumbIds только с теми элементами, которые вам нужны, но если вам нужен еще один слой косвенности, вы можете попробовать что-то вроде этого:

// This will give you eq1 and eq4
private Integer[] mActiveImages = {0, 3};

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

и заменить эту строку в getView на:

imageView.setImageResource(mThumbIds[mActiveImages[position]]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...