Как сделать петлю для n-й позиции 1, 11,21,31,41,51,61 ..... для разбивки на страницы с добавлением прослушивателя прокрутки - PullRequest
0 голосов
/ 30 ноября 2018

Здравствуйте, разработчики и преподаватели, я сталкиваюсь с проблемой, когда зацикливаюсь на n-й позиции в строковом URL-адресе.У меня все работает нормально, но в следующем коде слушатель recyclerview поочередно вызывает один и тот же элемент 10 раз и затем переходит на следующую позицию.Я хочу сказать, например, что (Item1, item2, Item3 ... Item10) вызывает 10 раз, т.е. после Item10 прослушиватель повторного вызова повторного вызова (Item1, item2, Item3 ... Item10) 10 раз, а после 10 разновые элементы добавляются как (Item11, item12, Item13 ... Item20) и так далее.

Я думаю, что я ошибаюсь в цикле в String Url.Для меня мне нужно, чтобы numberPosition в String url = "http://www.example.com/posts?item_position="+numberPosition"; должно изменяться в позиции (1, 11, 21, 31, 41, 51, 61, 71 .....) при вызове бесконечногоПролистайте обзор повторного просмотра, используя add on listener. Пожалуйста, помогите мне решить эту проблему. Я буду очень благодарен.

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

    int visibleItemCount = layoutManager.getChildCount();
    int totalItemCount = layoutManager.getItemCount();
    int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();

    if (!isLoading() && !isLastPage()) {
        if ((visibleItemCount + firstVisibleItemPosition) >= totalItemCount
                && firstVisibleItemPosition >= 0) {
            count++;
            loadMoreItems();

        }
    }
}



    public void loadMoreItems() {
int numberPosition;

      if (numberPosition < 0) {
         numberPosition=1
      } else {
         numberPosition = 1+(count-1) * 10;
      }
     String url = "http://www.example.com/posts?item_position="+numberPosition";
    }

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

глядя на твой код, я могу только догадываться (правда, просто догадываться), что ты пытаешься сделать, что-то вроде этого.Может быть, вы можете скопировать и попробовать код ниже ... Спасибо.

public void loadMoreItems() {
    int numberPosition;

    if (count <= 0) {
        count = 1;
    }

    numberPosition = 1 + (count - 1) * 10;

    String url = "http://www.example.com/posts?item_position=" + numberPosition;
}
0 голосов
/ 30 ноября 2018

Я бы посоветовал вам не использовать OnScrolled.Это неэффективный метод.Используйте Постраничные списки для лучших результатов.

Решение:

  • Вам необходимо добавить еще одну переменную => private boolean isLoading = false;
  • Когда вы достигнете конца recyclerView && isLoading == false, только тогда вызовите => loadMoreItems ().
  • Первое, что нужно сделать внутри loadMoreItems () - это => isLoading = true;так что метод не будет вызываться несколько раз, как в вашем случае.Как только loadMoreItems () выполнил свою задачу, вы можете => isLoading = false;так что в следующий раз, когда вы достигнете нижней части recy

clerView, метод может быть вызван.

Но я предлагаю вам использовать Paged Lists, у него есть прекрасные примеры.

0 голосов
/ 30 ноября 2018

Знаете ли вы о концепции переменной области?В вашем втором методе переменная numberPosition повторно объявляется дважды, что не должно иметь место.Либо numberPosition должно быть переменной класса, либо вы должны передать numberPosition в метод loadMoreItems ().Вы не можете продолжать повторную настройку, это определенно даст неправильный вывод.

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

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

int visibleItemCount = layoutManager.getChildCount();
int totalItemCount = layoutManager.getItemCount();
int firstVisibleItemPosition =      layoutManager.findFirstVisibleItemPosition();
int numberPosition;
if (!isLoading() && !isLastPage()) {
    if ((visibleItemCount + firstVisibleItemPosition) >= totalItemCount
            && firstVisibleItemPosition >= 0) {
        count++;
        numberPosition = visibleItemCount + firstVisibleItemPosition;
        loadMoreItems(numberPostion);

    }
}

}

public void loadMoreItems(int numberPosition) {


  if (numberPosition < 0) {
     numberPosition=1
  } else {
     numberPosition = 1+(count-1) * 10;
  }
 String url = "http://www.example.com/posts?item_position="+numberPosition";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...