2013-03-18 3 views
-1

ImageView.setImageResource(int id); показывает OutOfMemoryError. У меня есть TableLayout в том, что я добавляю TableRow прагматично, в каждой строке я устанавливаю изображение, которое уже находится в папке ресурсов моих проектов, я ссылаюсь на эти изображения с resource_id.OutOfMemoryError при выполнении setImageResource()

private void addItems() { 
    table.removeAllViews(); 
    Random rand = new Random(); 

    for (int i = 0; i < 20; i++) { 
     TableRow row = new TableRow(getActivity()); 
     table.addView(row); 

     RelativeLayout profile = (RelativeLayout) getLayoutInflater(null).inflate(R.layout.buddyname, null); 
     TextView name = (TextView) profile.findViewById(R.id.name); 
     name.setText(randomNames[i]); 

     ImageView photo = (ImageView) profile.findViewById(R.id.photo); 
     photo.setImageResource(randomPhoto[new Random().nextInt(randomPhoto.length - 1)]); 
     row.addView(profile); 
    } 
} 

каждый раз, когда я делаю table.removeAllViews(); даже тогда он не работает, могу я думаю, это потому, что ресурс изображения снова и снова загружается на куче и не очищая кучу, мы можем ссылаться на ранее загруженное изображении, является там любое решение.

ответ

1

Имя Будды? Кажется, что это список контактов. Если это так, используйте ListView вместо этого. Он динамически загружает элементы, которые видны. 20 Таблицы строк действительно много.

+0

Вы говорите правильно, но я должен показать всех приятелей в списке и сетке, показывать каждый раз, когда пользователь меняет режим макета, я удаляю предыдущие строки таблицы и добавляю новые. – umesh

+0

Вы можете легко изменить между ListView и GridView, поскольку они расширяют AbsListView. Просто держите ссылку на AbsListView и создайте GridView или ListView, который зависит от вашей настройки и установите соответствующий адаптер. Кроме того, возможно, что вы показываете большие изображения аватаров. Используйте Options.inSampleSize для загрузки масштабированных растровых изображений. Или, если вы используете ресурсы, убедитесь, что фотографии невелики. –

+0

, но в чем проблема с этим кодом, если я нажму для changeToList и changeToGrid снова покажу его OutOfMemoryError. Если я прокомментирую строку 'photo.setImageResource (randomPhoto [new Random(). NextInt (randomPhoto.length - 1)]);', это не делает никаких проблем – umesh

Смежные вопросы