Android: Как определить конец прокрутки GridView

331
18 мая 2021, 13:20

Есть парсер, который вытаскивает с сайта ссылки на картинки и дальше при помощи Picasso они загружаются в GridView. Так как картинок очень много, вытащить все ссылки, и загрузить картинки, при моей реализации, очень долго

public class MainActivity extends Activity {
    public ArrayList<String> linkList = new ArrayList<String>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("LOG", "titleList:" + linkList);
        new ParsingFile().execute();
    }
    public class ParsingFile extends AsyncTask<String, Void, String> {
        protected int pages = 0;
        @Override
        protected void onPreExecute() {
            Log.d("LOG", "START");
        }
        @Override
        protected String doInBackground(String... arg) {
            try {
                /*Смотрю сколько страниц на сайте*/
                Document doc = Jsoup.connect("http://mintmanga.com/list?sortType=rate").get();
                Elements allPages = doc.select(".step");
                Element lastPage = allPages.last();
                pages = Integer.parseInt(lastPage.text());
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                /*Собираю ссылки на первой странице*/
                Document doc = Jsoup.connect("http://readmanga.me/list?sortType=rate").get();
                Elements link = doc.select("img[class*=lazy]");
                linkList.clear();
                for (Element links : link) {
                    linkList.add(links.attr("data-original"));
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                /*Пробегаю о остальным страницам и собираю ссылки*/
                for (int i = 1; i < pages; i++){
                    Document doc = Jsoup.connect("http://readmanga.me/list?sortType=rate&offset=" + Integer.toString(i*70)).get();
                    Elements link = doc.select("img[class*=lazy]");
                    linkList.clear();
                    for (Element links : link) {
                        linkList.add(links.attr("data-original"));
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            /*Отправляю ссылки на загрузку*/
            GridView gridView = (GridView) findViewById(R.id.images_gridview);
            gridView.setAdapter(new ImageAdapter(MainActivity.this, linkList));
            Log.d("LOG", "PAGES:" + pages);
        }
    }
}

Поэтому логично было бы загружать не все сразу, а по мере того, как пользователь листает ленту (например, на первой странице 20 картинок, они загружаются сразу, когда пользователь пролистывает до конца, подгружаются картинки со второй картинки и т.д). От сюда вопрос: как определить что пользователь долистал до конца заполненного GridView?

Answer 1

Вам нужно обработать событие onScroll при помощи OnScrollListener.

gridView.setOnScrollListener( new OnScrollListener() {
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        if((visibleItemCount+firstVisibleItem)==totalItemCount){
            // Пользователь до листал до конца.
        }
    }
});

Приблизительно как-то так.

READ ALSO
Синтаксическая ошибка в имени файла, имени папки или метке тома

Синтаксическая ошибка в имени файла, имени папки или метке тома

Ребят, подскажите пожалуйста, как указать путь к файлу чтобы он не ругался? FileNotFoundException

168
Android. Как обратиться к WebView из public void onClick(View view)?

Android. Как обратиться к WebView из public void onClick(View view)?

Есть конструкция которая находится в :

111
Error:java: Source option 5 is no longer supported. Use 6 or later

Error:java: Source option 5 is no longer supported. Use 6 or later

При первом запуске maven проекта такая ошибка случилась

87
массив собирается через раз nodejs

массив собирается через раз nodejs

Друзья привет у меня массивы в суммы собираются где одинаковые ключи, потмо выдаю два массива в куче, но вот проблема чтото один из массивов...

246