@george32451

Как сделать пагинацию Jsoup Android?

Вопрос схож с данной темой, но я никак не могу привязать это к своему коду
public class MainActivity extends Activity {

    public Elements title;
    public Elements content;
    public ArrayList<String> titleList = new ArrayList<>();

    private ArrayAdapter<String> adapter;
    private ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lv = (ListView)findViewById(R.id.listView1);

        new NewThread().execute();
        adapter = new ArrayAdapter<String>(this,R.layout.list_item, R.id.pro_item, titleList);

    }

    public class NewThread extends AsyncTask<String, Void, String>{
        @Override
        protected String doInBackground(String...arg){
            Document doc;
            try{
                titleList.clear();
                for(int i = 1; i<=21;i++) {
                    doc = Jsoup.connect(URL+"/?paged="+i).get();
                    title = doc.select(".genpost-entry-title ");
                    content = doc.select(".genpost-entry-content");
                    for (int j = 0; j<title.size(); j++) {
                        titleList.add(title.get(j).text() + "\n\n" + content.get(j).text());
                    }
                }
            }catch (IOException e){
                e.printStackTrace();
            }
            return  null;
        }

        @Override
        protected void onPostExecute(String result){lv.setAdapter(adapter);}

        }

    public abstract class InfiniteScrollListener implements AbsListView.OnScrollListener {
        private int bufferItemCount = 10;
        private int currentPage = 0;
        private int itemCount = 0;
        private boolean isLoading = true;

        public InfiniteScrollListener(int bufferItemCount) {
            this.bufferItemCount = bufferItemCount;
        }

        public abstract void loadMore(int page, int totalItemsCount);

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {

        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
        {
            if (totalItemCount < itemCount) {
                this.itemCount = totalItemCount;
                if (totalItemCount == 0) {
                    this.isLoading = true; }
            }

            if (isLoading && (totalItemCount > itemCount)) {
                isLoading = false;
                itemCount = totalItemCount;
                currentPage++;
            }

            if (!isLoading && (totalItemCount - visibleItemCount)<=(firstVisibleItem + bufferItemCount)) {
                loadMore(currentPage + 1, totalItemCount);
                isLoading = true;
            }
        }
    }
}

Сейчас код парсит все страницы одновременно, а нужно сделать динамическую подгрузку во время скролла. Вроде бы уже есть готовое решение, но я не могу применить его к своему коду.
Проблемы начинаются в части с ListView
myListView.setOnScrollListener(new InfiniteScrollListener(5) {
    @Override
    public void loadMore(int page, int totalItemsCount) {
        doc = Jsoup.connect("/page/" + page).get();
        content = doc.select("[style=margin:0.5em 0;line-height:1.785em]");

        for (Element contents : content) {
            if (!contents.text().contains("18+")) {
                titleList.add(contents.text());
            }
         }
        //Обновляем список
        adapter.notifyDataSetChanged();
    }
});

из приведенной выше темы.
Я просто не знаю, куда нужно добавить эту часть кода
  • Вопрос задан
  • 285 просмотров
Решения вопроса 1
@red-barbarian
вероятно, вы хотите:
1) присоединить к listview адаптер
2)на myListView.setOnScrollListener повесить запуск AsyncTask
3)AsyncTask загружает контент, парсит и возвращает список.
4) onPostExecute(List result){adapter.clear(); adapter.addAll(result); adapter.notifyDataSetChanged()} - заменяем данные и сообщаем адаптеру что сделали.
1), 2) в onCreate
3),4) в AasyncTask
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Tiberal
на мож работает еще
https://github.com/Tiberal/Reader
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы