Загрузить больше данных JSON в ListView - PullRequest
2 голосов
/ 24 ноября 2011

Кто-нибудь видел пример того, как Android загружает больше json данных, когда пользователь прокручивает страницу вниз? Я видел различные примеры использования статических массивов и генерации текста путем добавления к нему счетчика, но я ищу пример, использующий данные json, чтобы он загружал несколько записей тогда, когда пользователь прокручивал его, загружал еще несколько и т. Д. И т. Д.

1 Ответ

2 голосов
/ 24 ноября 2011

Напишите адаптер для элементов списка и добавьте метод для добавления новых результатов.

public class JsonListAdapter extends BaseAdapter {

   private List<JSONObject> list;

   public void appendList(List<JSONObject>pList) {
       if (list== null) {
           list= new List<JSONObject>();
       }
       if (pList != null) {
           list.addAll(pList);
           notifyDataSetChanged();
       }
   }
...
}

Добавьте прослушиватель прокрутки для запуска запроса пейджинга

private class PagingScrollListener implements OnScrollListener {

    private int lastOffset = 0;


    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        boolean isEndOfListReached = firstVisibleItem + visibleItemCount >= totalItemCount;
        boolean isOffsetRequested = lastOffset >= totalItemCount;

        if (isEndOfListReached && !isOffsetRequested) {
            lastOffset = totalItemCount;
            new PagingRequest(myListAdapter).execute(lastOffset);
        }
    }
...
}

Загрузите следующий пакет данныхи обновите адаптер:

private static class PagingRequest extends AsyncTask<Integer, Void, List<JSONObject> {

   private JsonListAdapter mAdapter;

   public PagingRequest(JsonListAdapter adapter) {
      this.mAdapter = adapter;
   }

    protected ProductList doInBackground(Integer... params) {
        int offset = params[0];
        // PERFORM REQUEST WITH OFFSET
        return newResults;
    }

    protected void onPostExecute(List<JSONObject> result) {
        mAdapter.appendList(result);
    }
 }

Отказ от ответственности: это всего лишь базовая стратегия, вам все равно нужно заполнить пробелы и адаптировать свой код.

...