Android Проблема прокрутки GridView - PullRequest
0 голосов
/ 27 апреля 2020

Я столкнулся с проблемой, что мой GridView «защелкивается» / «глюки» после того, как я прокручиваю до 4-й строки или дольше, чем 2 секунды.
Я получил 58 элементов, которые загружаются через адаптер в GridView , Предмет состоит из имени файла и изображения предмета (миниатюры). Каждый Thumbnail имеет ширину и высоту 100dp и загружается в ImageButton через Framework "Glide" без изменения размера, обрезки или чего-либо еще. Простой Glide.load(ressource).into(imageButton).

Пожалуйста, смотрите прикрепленные изображения, чтобы следовать моим дальнейшим объяснениям.
После прокрутки я ожидал, что мои элементы выровнены, как первые 15-19 элементов ранее. К сожалению, он прокручивает только «последний элемент» 4-й строки из GridView. Это означает, что в точке 2 (красный ди git на рисунке) все остальные элементы появляются на короткий период, если я прокручиваю их. After Scrolling, the GridView starts to get weird (see Point 2)

После дальнейшей прокрутки весь GridView и полоса прокрутки становятся «уничтоженными», и появляется только небольшое количество элементов, и, наконец, 1 или ни одного элемента. Я вижу, что полоса прокрутки очень быстро уменьшается после прокрутки. Completly weird behavior after scrolling for 2 seconds

GridView xml Свойства (в пределах main_activity. xml):

android:columnWidth="100dp"
android:gravity="center"
android:horizontalSpacing="5dp"
android:numColumns="auto_fit"
android:verticalSpacing="20dp"
android:visibility="visible"

Код GridViewAdapter:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    _layoutInflater = (LayoutInflater) _context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        _view = new View(_context);
        _view = _layoutInflater.inflate(R.layout.single_item, null);
        TextView textView = _view.findViewById(R.id.textView);
        final Item item = _items.get(position);
        textView.setText(item.getName());
        ImageButton imageButton = _view.findViewById(R.id.imageButton);
        Glide.with(_context).load(item.getDrawableRessource()).into(imageButton);
        imageButton.setOnClickListener(click -> {
            _iOnItemClickListener.onClick(item);
        });
    }
    return _view;
}

Спасибо за любой полезный совет.

1 Ответ

0 голосов
/ 28 апреля 2020

Попробуйте это:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    _view = convertView;
    if (convertView == null) {
        _layoutInflater = (LayoutInflater) _context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        _view = _layoutInflater.inflate(R.layout.single_item, null);
    }
    TextView textView = _view.findViewById(R.id.textView);
    final Item item = _items.get(position);
    textView.setText(item.getName());
    ImageButton imageButton = _view.findViewById(R.id.imageButton);
    Glide.with(_context).load(item.getDrawableRessource()).into(imageButton);
    imageButton.setOnClickListener(click -> {
        _iOnItemClickListener.onClick(item);
    });
    return _view;
}
...