커스텀 ArrayAdapter를 사용하여 Spinner에 이미지를 표시하는 데 안 보일 때가 있습니다.
코드는 아래와 같습니다.
 
public class AppInfo implements Serializable {
    public byte[] imgData;
    public  String AppName;
    public String PackageName;
 
 
}
 
public class custom_adapter extends ArrayAdapter {
    public ArrayList<AppInfo> m_list;
 
 
    private PackageManager pm;
 
    ALPHA_COMPARATOR _comparator;
 
 
    public custom_adapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
        pm = context.getPackageManager();
        m_list=new ArrayList<AppInfo>();
        _comparator = new ALPHA_COMPARATOR(context);
    }
    public custom_adapter(Context context, int textViewResourceId, String[] objects) {
        super(context, textViewResourceId, objects);
        pm = context.getPackageManager();
        m_list=new ArrayList<AppInfo>();
        _comparator = new ALPHA_COMPARATOR(context);
    }
 
......
 
 
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return getCustomView(position, convertView, parent);
    }
 
    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        return getCustomView(position, convertView, parent);
    }
 
    public View getCustomView(int position, View convertView, ViewGroup parent)
    {
        final Context context = parent.getContext();
       
        ImageView img=null;
        TextView text=null;
        Holder holder=null;
 
       if ( convertView == null ) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           convertView = inflater.inflate(R.layout.custom_item, parent, false);
 
           img = (ImageView) convertView.findViewById(R.id.list_image);
           text = (TextView) convertView.findViewById(R.id.text);
 
 
           holder = new Holder();
           holder.iv=img;
           holder.tv=text;
           convertView.setTag(holder);
       }
       else
       {
           holder=(Holder)convertView.getTag();
           img=holder.iv;
           text=holder.tv;
       }
 
img.setImageBitmap(BitmapFactory.decodeByteArray(m_list.get(position).imgData, 0, m_list.get(position).imgData.length));
text.setText(m_list.get(position).AppName);
 
        return convertView;
    }
 
setImageBitmap 때문에 느려서 일꺼라는 분들도 계셔서 cache를 써 보아도 같은 증상입니다.
피카소 라이브러리 써 보시라는 분도 계셨는데 안되네요...
꼭 처음 드돕다운의 모든 아이템은 다 표시되고 그 다음 첫 아이템은 항상 표시되지 않습니다
또 표시 됐던 것도 스크롤 하다 다시 돌아가 보면 안보일 때가 있고 다시 내렸다 돌아가면 다시 표시 될 때도 있습니다.
하지만 convertView가 null일  때만 하지 않고 항상 
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           convertView = inflater.inflate(R.layout.custom_item, parent, false);
 
위 함수를 호출해서 converView를 갱신해서 사용하면 이미지는 잘 보이는데 대신 스크롤을 많이 하면 메모리 사용이 계속 증가 하다가 OutOfMemory가 발생합니다.
 
convertView의 null 처리 부분이 잘 된것 맞나요?
 
고수님들의 가르침을 부탁드립니다.