Установить массив ImageView (Android) - PullRequest
0 голосов
/ 07 января 2012

Моя проблема в этом. У меня есть несколько объектов ImageView в моем макете XML. Я хочу иметь возможность вставлять в них изображения в зависимости от «если» и «еще» (так сказать). Поэтому я решил назначить все эти объекты в массив. Но приложение не запустится. Вот как я это сделал:

private void setImageView(){
    images = new ImageView[imagesNR];
    images[0] = (ImageView) findViewById(R.id.imageView1);
    images[1] = (ImageView) findViewById(R.id.imageView2);
    images[2] = (ImageView) findViewById(R.id.ImageView01);
    images[3] = (ImageView) findViewById(R.id.ImageView02);
    images[4] = (ImageView) findViewById(R.id.ImageView03);
    images[5] = (ImageView) findViewById(R.id.ImageView04);
    images[6] = (ImageView) findViewById(R.id.ImageView05);
    images[7] = (ImageView) findViewById(R.id.ImageView06);
    images[8] = (ImageView) findViewById(R.id.ImageView07);
    images[9] = (ImageView) findViewById(R.id.ImageView08);
    images[10] = (ImageView) findViewById(R.id.ImageView09);
    images[11] = (ImageView) findViewById(R.id.ImageView10);
}

Я понимаю, что это не самый лучший способ, но так как я новичок, это то, что я придумал. Я боюсь, что не могу рассказать вам слишком много об ошибке. Приложение принудительно закрывают и все.

Есть ли другой способ, которым я могу иметь массив ImageView и манипулировать ими соответственно? ... Я хочу поместить объекты в RelativeLayout и указать, куда поместить все эти ImageViews и т. Д. И т. Д.

Edit:

private ImageView images[];

Так я объявил массив.

Ответы [ 3 ]

1 голос
/ 07 января 2012

Я знаю, вы говорите, что все хорошо, но только предложение. Это принесет вам пользу гораздо позже, если вы потратите время, чтобы освоиться с этой моделью сейчас. Вы должны знать, что несколько изображений дороже, чем составное. Если вы хотите отобразить массив изображений, я предлагаю вам использовать реализацию, которая была разработана именно для этого, т.е. Галерея, GridView или ListView приходят на ум.

0 голосов
/ 12 октября 2015

1.

    for (int i = 0; i < container.getChildCount(); i++) {
        images[i] = (ImageView) container.getChildAt(i);
    }

2.

for (int i = 0; i < 10; i++) {
        int id = getResources().getIdentifier("R.id.imageView" + i, "id", null);
        images[i] = (ImageView) getActivity().findViewById(id);
}

Второй вариант довольно дорогой, поскольку согласно документу getIdentifier:

Примечаниеиспользование этой функции не рекомендуется.Гораздо эффективнее получать ресурсы по идентификатору, чем по имени.

0 голосов
/ 07 января 2012

Ваш imageView определен как ниже (проверьте скобки). Это определение из одного из моих приложений и работает точно.

ImageView mCnName[]= new ImageView[NUMBER_OF_IMAGE];

Путь в принципе не неправильный, но если бы все ImageView имели одинаковые или одинаковые атрибуты, я бы использовал немного неуверенный подход. Позволяет по умолчанию просматривать все изображения с синим фоном. Как и вы, вы должны либо в своем файле layout.xml дать каждому из них атрибут, либо вам придется запустить цикл, чтобы программно изменить цвет bg каждого ImageView.

Почти во всех моих приложениях я предпочитаю такой подход. Определите ImageView со всеми атрибутами в вашем XML-файле.

  1. определить layoutinflater и использовать mLayOutInflater=this.getLayoutInflater();
  2. mCnName[i]=mLayOutInflater.inflate(R.layout.yourImageView, null);
  3. добавить раздутый вид с помощью parentLayout.addView(mCnName[i],null); Таким образом, проще спроектировать и изменить макет позже.

Но, как я уже сказал, нет необходимости использовать мой подход. Твой может работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...