Как получить 20 элементов каждый раз, когда достигнет конца RecyclerView, и убедиться, что он отличается от предыдущего элемента?

У меня есть RecyclerView, который я хочу, чтобы это была бесконечная прокрутка, поэтому всякий раз, когда я достигаю последних 5 элементов, он снова отправляет запрос на сервер. С этой частью проблем нет, он может обнаружить последние 5 элементов в RecyclerView и снова выполнить запрос Volley. ,

Основная проблема сейчас заключается в том, что данные, которые запрашивают во 2-й раз (запрос, который был сделан при достижении последних 5 элементов), — это те же данные, что и в 1-й раз.

Поэтому я хочу, чтобы при первом запросе (пользователь просто запустил действие) получил 20 сообщений и отобразил его, когда достигнет последних 5 пунктов, запросит еще 20 сообщений, что отличается от первых 20 постов.

Пока что я попробовал

Установить смещение

// initially offset will be 0, later will be updated while parsing the json
private int offSet = 0;

Обновите смещение с помощью идентификатора, который выбирается при первом запросе

// updating offset value to highest value
if (id >= offSet)
offSet = id;

Отправить offset значение к php серверу в залпе (тот же запрос залпа 1-го запроса)

@Override
protected Map<String, String> getParams() {
// Posting params to  endpoint
Map<String, String> params = new HashMap<>();
params.put("offset", String.valueOf(offSet));

return params;
}

Так что в моем PHP-коде я обращаюсь так

    $offsetString =$app->request()->get('offset');
$offset =(int) $offsetString;
$limit=20;
//loop though result and get the 20 post each time
for ($j = $offset; $j < $offset + $limit && $j < sizeof($item = $result->fetch_assoc()); $j++) {

$tmp = array();
$tmp['post_id'] = $item['item_id'][$j];
$tmp['username'] = $item['username'][$j];
$tmp['profile_image_path'] = $item['profile_image_path'][$j];
$tmp['status_body'] = $item['status_body'][$j];
$tmp['image_path'] = $item['image_path'][$j];
$tmp['post_created_at'] = $item['created_at'][$j];
array_push($response['item'], $tmp);
}

Но в итоге мой Json стал таким странным и совершенно другим JSON с моим Json раньше.

 {"feed":[{"item_id":null,"username":"k","profile_image_path":"h","status_body":"I","image_path":"h","created_at":"2"},{"item_id":null,"username":"e","profile_image_path":"t","status_body":"h","image_path":"t","created_at":"0"},

На данный момент, когда я достигаю последних 5 элементов в RecyclerView, я использую ту же функцию для создания запроса. Это выглядит так:

//for endless scroll
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);

visibleItemCount = recyclerView.getChildCount();
totalItemCount = mLayoutManager.getItemCount();
firstVisibleItem = mLayoutManager.findFirstVisibleItemPosition();

if (loading) {
if (totalItemCount > previousTotal) {
loading = false;
previousTotal = totalItemCount;
}
}
if (!loading && (totalItemCount - visibleItemCount)
<= (firstVisibleItem + visibleThreshold)) {
// End has been reached

Log.i("Yaeye!", "end called");

//This is Volley request to fetch data from Server
//should I make another volley request that different with the 1st request
fetchPost();

loading = true;
}
}
});

Итак, мне нужно знать, что я пропускаю, или правильный способ решения этой проблемы?

Самое главное, что мне делать в php части?

Или я должен сделать 2 отдельных запроса залпа для получения данных?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector