Как определить когда ScrollView опущен вниз?

Ответить
wolfak
Сообщения: 13
Зарегистрирован: 13 сен 2014, 11:15

Как определить когда ScrollView опущен вниз?

Сообщение wolfak » 18 янв 2016, 21:37

Добрый вечер.
Разрабатываю приложение под андроид и столкнулся с необходимостью подзагрузки контента при достижения скроллом конца страницы.
Как это можно реализовать? Может есть какое-нибудь событие у ScrollView?
Искал в интернете, ничего полезного не нашел. Желательно с подробным примером. Спасибо.

wolfak
Сообщения: 13
Зарегистрирован: 13 сен 2014, 11:15

Re: Как определить когда ScrollView опущен вниз?

Сообщение wolfak » 18 янв 2016, 21:38

Пробовал этот метод: не работает:

Код: Выделить всё

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) 
{
    // Grab the last child placed in the ScrollView, we need it to determinate the bottom position.
    View view = (View) getChildAt(getChildCount()-1);

    // Calculate the scrolldiff
    int diff = (view.getBottom()-(getHeight()+getScrollY()));

    // if diff is zero, then the bottom has been reached
    if( diff == 0 )
    {
        // notify that we have reached the bottom
        Log.d(ScrollTest.LOG_TAG, "MyScrollView: Bottom has been reached" );
    }

    super.onScrollChanged(l, t, oldl, oldt);
}
Может просто не правильно использую. Нужен подробный пример использования с самого объявления скролла.

Sergey777
Сообщения: 68
Зарегистрирован: 30 мар 2015, 17:16

Re: Как определить когда ScrollView опущен вниз?

Сообщение Sergey777 » 23 янв 2016, 15:48

wolfak писал(а):Пробовал этот метод: не работает:

Код: Выделить всё

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) 
{
    // Grab the last child placed in the ScrollView, we need it to determinate the bottom position.
    View view = (View) getChildAt(getChildCount()-1);

    // Calculate the scrolldiff
    int diff = (view.getBottom()-(getHeight()+getScrollY()));

    // if diff is zero, then the bottom has been reached
    if( diff == 0 )
    {
        // notify that we have reached the bottom
        Log.d(ScrollTest.LOG_TAG, "MyScrollView: Bottom has been reached" );
    }

    super.onScrollChanged(l, t, oldl, oldt);
}
Может просто не правильно использую. Нужен подробный пример использования с самого объявления скролла.
Здравствуйте! Запомните состояние скроллинга конструкторе, а затем сверьте значение с высотой экрана устройства:

Код: Выделить всё

private int scrollY;
private int dispY;
ScrollView scrollView;
scrollView = (ScrollView) rootView.findViewById(R.id.какой-то id);
// узнаем размеры экрана из класса Display
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics metricsB = new DisplayMetrics();
display.getMetrics(metricsB);
dispY = metricsB.heightPixels;
saveScroll();
// сравнивваем эти значения
if(scrollY > dispY){
// что-то делаем
}
// запоминаем значение скроллинга в переменную scrollY
	private void saveScroll(){
		scrollView.post(new Runnable(){

			@Override
			public void run() {
				scrollY = scrollView.getScrollY();
				Log.d("Координаты скроллинга", scrollY);
			}
			
		});
	}

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Как определить когда ScrollView опущен вниз?

Сообщение doter.ua » 23 янв 2016, 17:02

Добавляй последним элементом\футером вью "показать еще.." и подгружай по клику.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

wolfak
Сообщения: 13
Зарегистрирован: 13 сен 2014, 11:15

Re: Как определить когда ScrollView опущен вниз?

Сообщение wolfak » 24 янв 2016, 10:29

doter.ua писал(а):Добавляй последним элементом\футером вью "показать еще.." и подгружай по клику.
Это просто смешно)

wolfak
Сообщения: 13
Зарегистрирован: 13 сен 2014, 11:15

Re: Как определить когда ScrollView опущен вниз?

Сообщение wolfak » 24 янв 2016, 12:46

Sergey777 писал(а):
wolfak писал(а):Пробовал этот метод: не работает:

Код: Выделить всё

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) 
{
    // Grab the last child placed in the ScrollView, we need it to determinate the bottom position.
    View view = (View) getChildAt(getChildCount()-1);

    // Calculate the scrolldiff
    int diff = (view.getBottom()-(getHeight()+getScrollY()));

    // if diff is zero, then the bottom has been reached
    if( diff == 0 )
    {
        // notify that we have reached the bottom
        Log.d(ScrollTest.LOG_TAG, "MyScrollView: Bottom has been reached" );
    }

    super.onScrollChanged(l, t, oldl, oldt);
}
Может просто не правильно использую. Нужен подробный пример использования с самого объявления скролла.
Здравствуйте! Запомните состояние скроллинга конструкторе, а затем сверьте значение с высотой экрана устройства:

Код: Выделить всё

private int scrollY;
private int dispY;
ScrollView scrollView;
scrollView = (ScrollView) rootView.findViewById(R.id.какой-то id);
// узнаем размеры экрана из класса Display
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics metricsB = new DisplayMetrics();
display.getMetrics(metricsB);
dispY = metricsB.heightPixels;
saveScroll();
// сравнивваем эти значения
if(scrollY > dispY){
// что-то делаем
}
// запоминаем значение скроллинга в переменную scrollY
	private void saveScroll(){
		scrollView.post(new Runnable(){

			@Override
			public void run() {
				scrollY = scrollView.getScrollY();
				Log.d("Координаты скроллинга", scrollY);
			}
			
		});
	}
Спасибо, но метод не подходит, так как подгружать контент нужно не один раз.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Как определить когда ScrollView опущен вниз?

Сообщение klblk » 25 янв 2016, 06:59

для RecyclerView пример:
https://gist.github.com/ssinss/e06f12ef66c51252563e
Думаю и для ScrollView можно как-нибудь переделать

Ответить