0

У меня есть проект андроида, который содержит просмотрщик и навигационный ящик. в каждом фрагменте viewpager у меня есть gridview с данными загрузки с сервера! Мой вопрос заключается в том, что все работает нормально во всех устройствах от низких аппаратных до мощных, но в некоторых устройствах, таких как галактика s4 и некоторые sony xperia, он дает слишком много отставания от прокрутки сетки или открытия навигационного ящика. что с этим не так?Андроид UI отставание на некоторых устройствах

P.S: ниже код для GridView адаптера:

public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.grid_item, parent, false); 
    } 
    SimpleData item = myDatas.get(position); 
    ((TextView) convertView.findViewById(R.id.title)).setText(item.getName()); 
    ImageView thumbnail = (ImageView) convertView.findViewById(R.id.thumbnail); 
    thumbnail.getLayoutParams().height = thumbnail.getLayoutParams().width; 

    if (item.getThumbnail() != null && !item.getThumbnail().isEmpty()) { 
     if (item.getThumbnail().startsWith("http")) { 
      Picasso.with(mContext) 
        .load(item.getThumbnail()) 
        .placeholder(R.drawable.loading) 
        .into(thumbnail); 
     } else { 
      Picasso.with(mContext) 
        .load(Uri.fromFile(new File(item.getThumbnail()))) 
        .placeholder(R.drawable.loading) 
        .into(thumbnail); 
     } 
    } else { 
     thumbnail.setImageResource(R.drawable.noimage); 
    } 

    ((TextView) convertView.findViewById(R.id.province)).setText(item.getProvince()); 
    ((TextView) convertView.findViewById(R.id.likesCount)).setText(item.getLikesCount() + ""); 

    convertView.forceLayout(); 
    return convertView; 
} 

ответ

1

И наконец, я нашел проблему! задержка была из-за еще части кода, которые устанавливают изображение в потоке пользовательского интерфейса, ниже линии:

thumbnail.setImageResource(R.drawable.noimage); 

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

Picasso.with(mContext) 
       .load(R.drawable.noimage) 
       .placeholder(R.drawable.loading) 
       .into(thumbnail); 

Спасибо всем за помощь.

0

Вы делаете много вещей, которые не рекомендуется здесь, и которые могут быть причиной ваших лагов.

Сначала не используйте convertView.forceLayout();, в соответствии с его documentation он заставит ваш макет отображать, когда он не нужен. Во-вторых, вы надуваете convertView, вы должны не сделать это в getView адаптера. Помните, что вы переопределяете класс, и вам не нужно раздувать макет, это делается автоматически с помощью класса адаптера на верхнем уровне.

Наконец, вы не использовать адаптер шаблона проектирования в виде:

if (convertView == null) { 
    ... 
} else { 
    ... 
} 

Для получения дополнительной информации о последних см себя this documentation, есть ImageAdapter пример.

+0

документация, на которую вы ссылаетесь, делает что-то вроде того, что я сделал! он раздувает новый взгляд на класс ImageView! Интересно, что тот же самый код работает над другим приложением! – Evil

0

Ваш метод getView делает много вещей, вы должны узнать о загрузке растровых изображений asynchronously в GridView, и после этого он не будет отставать.

+0

не Picasso загружает битовые карты асинхронно? Я ошибаюсь? – Evil

+0

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

+0

. Другая часть загрузки была проблемой из-за того, что не использовалась Picasso, BTW спасибо человеку :-) – Evil

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