Страница 1 из 1

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

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

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

Добавлено: 18 янв 2016, 21:38
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);
}
Может просто не правильно использую. Нужен подробный пример использования с самого объявления скролла.

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

Добавлено: 23 янв 2016, 15:48
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);
			}
			
		});
	}

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

Добавлено: 23 янв 2016, 17:02
doter.ua
Добавляй последним элементом\футером вью "показать еще.." и подгружай по клику.

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

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

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

Добавлено: 24 янв 2016, 12:46
wolfak
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);
			}
			
		});
	}
Спасибо, но метод не подходит, так как подгружать контент нужно не один раз.

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

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