2014-01-25 1 views
10

Мой код показывает следующее предупреждение:типизированных массивов должны быть переработаны после использования #recycle()

типизированных массивов должны быть переработаны после использования #recycle() для obtainedTypedArray

Код:

public View getView(int i, View view, ViewGroup viewgroup) 
{ 
    ImageView imageview; 
    if (view == null) 
    { 
     imageview = new ImageView(b); 
     imageview.setLayoutParams(new android.widget.AbsListView.LayoutParams(110, 110)); 
     imageview.setPadding(1, 1, 1, 1); 
     imageview.setAdjustViewBounds(false); 
     imageview.setScaleType(android.widget.ImageView.ScaleType.CENTER_CROP); 
    } else 
    { 
     imageview = (ImageView)view; 
    } 
    imageview.setImageResource(a.getResources().obtainTypedArray(0x7f050000).getResourceId(i, -1)); //*warning*Typed Array should be recycled after use with #recycle() 
    return imageview; 
} 
+0

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

+0

приятель его показывает ошибку 'Метод recyle() не определен для типа MainActivity' –

+0

Да. В фактах вы должны перерабатывать свой типизированный массив, а не активность. В моем комментарии я сказал ** ta.recycle(); **, а не ** this.recycle(); **. Это была не опечатка. «ta», стоящий за «типизированным массивом», тот, который вы должны создать, прежде чем использовать imageview.setImageResource .... –

ответ

8

использовать recycle(); в конце вашего заявления obtainTypedArray(). не используют значения hex, могут привести к осложнениям в вашем коде в будущем.

12

вы должны держать на TypedArray вы получите обратно от obtainTypedArray() и са ll recycle() на нем после использования.

Кроме того, жесткое кодирование шестнадцатеричного значения, такого как 0x7f050000, вряд ли будет правильным ответом.

+0

как сделать hard-code - шестнадцатеричное значение, например '0x7f050000'? –

+0

@MojoJojo Вы не должны (не должны) жестко программировать его. Вместо этого используйте имя, например 'R.id.foo'. – dsh

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