2016-03-09 5 views
0

Я использую универсальный загрузчик изображений для загрузки около 50 изображения из URL
списка изображений с некоторыми изображениями имеют размера 960px х 1378 и некоторые изображения имеют размер 1920px х 1378px это мой связующий данныеандроид изображения загрузить из URL использовать универсальный образ загрузчика

public class BinderDataImg extends BaseAdapter { 
static final String KEY_IMG = "img"; 
LayoutInflater inflater; 
List<HashMap<String,String>> imgHashmap; 
ViewHolder holder; 
public BinderDataImg() { 
    // TODO Auto-generated constructor stub 
} 
public BinderDataImg(Activity act, List<HashMap<String,String>> map) { 
    this.imgHashmap = map; 
    inflater = (LayoutInflater) act 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 
public int getCount() { 
    // TODO Auto-generated method stub 
    return imgHashmap.size(); 
} 
public Object getItem(int arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 
public View getView(int position, View convertView, ViewGroup parent) { 
    View vi=convertView; 
    if(convertView==null){ 
     vi = inflater.inflate(R.layout.list_img, null); 
     holder = new ViewHolder(); 
     holder.iv_img =(ImageView)vi.findViewById(R.id.imageViewImg); 
     vi.setTag(holder); 
    } 
    else{ 
     holder = (ViewHolder)vi.getTag(); 
    } 
    String uri = imgHashmap .get(position).get(KEY_IMG); 
    ImageLoader imageLoader = ImageLoader.getInstance(); 
    imageLoader.getInstance().displayImage(uri, holder.iv_img); 
    return vi; 
} 
static class ViewHolder{ 
    ImageView iv_img; 
} 

}

это конфиг загрузчика изображения универсальной активности

DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() 
      .cacheOnDisc(true).cacheInMemory(true) 
      .imageScaleType(ImageScaleType.EXACTLY) 
      .displayer(new FadeInBitmapDisplayer(300)).build(); 

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
      getApplicationContext()) 
      .defaultDisplayImageOptions(defaultOptions) 
      .memoryCache(new WeakMemoryCache()) 
      .discCacheSize(100 * 1024 * 1024).build(); 

    ImageLoader.getInstance().init(config); 

все изображения загружены, но когда прокрутку вверх или вниз, изображение в вверх или ниже перезагрузки снова
и другая проблема
, когда экран по вертикали, ширина размера использовать экран изображения 960x1378
все заливка изображение на экране
но когда поворот экран к горизонтали, ширина экрана использовать размер изображения 1960x1378
и изображение 960x1378 будет меньше
почему это? и как это исправить
извините за мой плохой английский
спасибо за чтение

+1

это происходит потому, что когда вы просматриваете вверх или вниз, просмотр становится обновленным, просто говоря, что метод getView адаптера снова открывается и снова обновляет представление, чтобы перезагрузить изображение. Это нормально. –

+0

это нормально? и если я поверну экран, изображение будет меньше. это тоже нормально? – abcd1234

+0

Да, это нормальный человек. Если ваше изображение становится меньше, чем проблема с макетом, это не нормально. –

ответ

-1

Вы создаете новый экземпляр каждый раз в GetView():

Ваш обновленный код:

public class BinderDataImg extends BaseAdapter { 
static final String KEY_IMG = "img"; 
LayoutInflater inflater; 
List<HashMap<String,String>> imgHashmap; 
ViewHolder holder; 
ImageLoader imageLoader = ImageLoader.getInstance(); 

public BinderDataImg() { 
    // TODO Auto-generated constructor stub 
} 
public BinderDataImg(Activity act, List<HashMap<String,String>> map) { 
    this.imgHashmap = map; 
    inflater = (LayoutInflater) act 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 
public int getCount() { 
    // TODO Auto-generated method stub 
    return imgHashmap.size(); 
} 
public Object getItem(int arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 
public View getView(int position, View convertView, ViewGroup parent) { 
    View vi=convertView; 
    if(convertView==null){ 
     vi = inflater.inflate(R.layout.list_img, null); 
     holder = new ViewHolder(); 
     holder.iv_img =(ImageView)vi.findViewById(R.id.imageViewImg); 
     vi.setTag(holder); 
    } 
    else{ 
     holder = (ViewHolder)vi.getTag(); 
    } 
    String uri = imgHashmap .get(position).get(KEY_IMG); 
    imageLoader.displayImage(uri, holder.iv_img); 
    return vi; 
} 
static class ViewHolder{ 
    ImageView iv_img; 
} 

} 

Надеюсь, это вам поможет.

+0

Спасибо за вашу помощь, но все равно это ничего не меняет – abcd1234

+0

@ abcd1234, у вас есть попытка imageLoader.displayImage (uri, holder.iv_img); –

+0

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

0

Вид каждой строки в ListView многоразовый, поэтому метод getView() в вашем адаптере требует вызова несколько раз при прокрутке для заполнения правильных данных для строки. Это нормальное поведение адаптера ListView. Ваш звонок getView(), тогда ваше изображение перезагрузится.

Чтобы понять, почему getView() нужно называть я полагаю, что
- Вы можете создать INT [] массив для сохранения положения, в котором изображение загруженного
- Тогда в getView() проверки загружается или не
изображение - Если он загружен, то вы не нагружаете

Я ожидаю, что результат после свитка ListView, вся деталь вашего ListView будет такой же

Надеются, что это поможет

+0

это нормально? – abcd1234

+0

Да, это нормальное поведение –

+0

У меня есть еще одна проблема: при повороте экрана в горизонтальное, изображение будет меньше, как исправить его – abcd1234