Scroll в ListView

Интерфейс, диалоги, темы, стили, меню
Ответить
Dangreon
Сообщения: 41
Зарегистрирован: 01 янв 2013, 15:52

Scroll в ListView

Сообщение Dangreon » 10 май 2013, 21:48

Возник вопрос, мне необходимо отслеживать, на какую величину в dp, прокручивается ListView, чтобы на это соответствующим образом реагировать.
Но никак не могу выяснить, как это можно отслеживать. Кто-нибудь знает ?

xr0m
Сообщения: 131
Зарегистрирован: 06 апр 2013, 14:01

Re: Scroll в ListView

Сообщение xr0m » 10 май 2013, 22:01

Используй событие
@Override
public void onScroll(AbsListView absListView, int firstVisible, int visibleCount, int totalCount) {
//firstvisible is your first visible item in the list
}

Dangreon
Сообщения: 41
Зарегистрирован: 01 янв 2013, 15:52

Re: Scroll в ListView

Сообщение Dangreon » 10 май 2013, 23:26

и как в дипах можно отмерить?)

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Scroll в ListView

Сообщение rezak90 » 10 май 2013, 23:35

У ScrollView есть метод onScrollChanged в который приходят координаты по Х и У смены позиции, узнаём разницу это будет пиксели, ну а пиксели преобразовать в дипы не составит труда.
R.id.team
Политика на форуме запрещена

xr0m
Сообщения: 131
Зарегистрирован: 06 апр 2013, 14:01

Re: Scroll в ListView

Сообщение xr0m » 11 май 2013, 08:46

Dangreon писал(а):и как в дипах можно отмерить?)
высоту в дип для каждого элемента Вам известно, умножаем номер элемента на высоту.

Dangreon
Сообщения: 41
Зарегистрирован: 01 янв 2013, 15:52

Re: Scroll в ListView

Сообщение Dangreon » 11 май 2013, 09:58

Мне нужно прокручивать и измерять ListView! А не ScrollView. Так как же это можно сделать?

xr0m
Сообщения: 131
Зарегистрирован: 06 апр 2013, 14:01

Re: Scroll в ListView

Сообщение xr0m » 11 май 2013, 11:30

Dangreon писал(а):Мне нужно прокручивать и измерять ListView! А не ScrollView. Так как же это можно сделать?
можно прочитать документацию )

OnScrollListener
onScrollChanged

onScrollChanged наследуется от вью.

Dangreon
Сообщения: 41
Зарегистрирован: 01 янв 2013, 15:52

Re: Scroll в ListView

Сообщение Dangreon » 11 май 2013, 12:51

Ок! И как вызвать этот метод onScrollChanged для ListView ?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Scroll в ListView

Сообщение Foenix » 11 май 2013, 13:07

он не вызывается, он обрабатывается
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Dangreon
Сообщения: 41
Зарегистрирован: 01 янв 2013, 15:52

Re: Scroll в ListView

Сообщение Dangreon » 11 май 2013, 13:34

Ваш ответ не по существу.

Dangreon
Сообщения: 41
Зарегистрирован: 01 янв 2013, 15:52

Re: Scroll в ListView

Сообщение Dangreon » 11 май 2013, 16:25

У ScrollView есть метод onScrollChanged в который приходят координаты по Х и У смены позиции, узнаём разницу это будет пиксели, ну а пиксели преобразовать в дипы не составит труда.

Как добраться до этого метода?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Scroll в ListView

Сообщение Foenix » 11 май 2013, 18:37

http://stackoverflow.com/questions/3948 ... ns-android
вот тут пример обертки
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Scroll в ListView

Сообщение rezak90 » 11 май 2013, 21:46

я дал ответ, что тебе в нём не понятно?
R.id.team
Политика на форуме запрещена

Dangreon
Сообщения: 41
Зарегистрирован: 01 янв 2013, 15:52

Re: Scroll в ListView

Сообщение Dangreon » 12 май 2013, 17:09

Я сделал как подсказал Foenix, унаследовался от ListView создав свой MyListView, перегрузил метод onScrollChanged, добавил метод установки слушателя, реализовал интерфейс в активити. Проблема в том, когда я ставлю в этот метод
логирование (Log.d(вывести параметры которые приходят в метод)) то в лог ничего не идет. Выходит когда я скролю пальцем свой список, этот метод не вызывается. Хм.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Scroll в ListView

Сообщение Foenix » 12 май 2013, 20:05

Так ничего не понять, нужно коды выкладывать, логи.. может кто-то увидит в чем ошибка..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Scroll в ListView

Сообщение rezak90 » 12 май 2013, 20:09

Я сделал как подсказала Foenix, унаследовался от ListView создав свой MyListView, перегрузил метод onScrollChanged
я тоже самое предлагал, может не доходчиво объяснил
Так ничего не понять, нужно коды выкладывать, логи.. может кто-то увидит в чем ошибка..
+
R.id.team
Политика на форуме запрещена

Dangreon
Сообщения: 41
Зарегистрирован: 01 янв 2013, 15:52

Re: Scroll в ListView

Сообщение Dangreon » 14 май 2013, 11:05

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

public class MyScrollListView extends ListView {
    
    private ScrollListViewListener scrollListViewListener;
    
    public MyScrollListView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }
    
    public MyScrollListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }
    
    public MyScrollListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
    }
    
    public void setScrollListViewListener(ScrollListViewListener scrollListViewListener) {
        this.scrollListViewListener = scrollListViewListener;
    }
    
    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        // TODO Auto-generated method stub
        super.onScrollChanged(l, t, oldl, oldt);
        //Log.d("myLogs", "l = " + String.valueOf(l) + ",t = " + String.valueOf(t) + ",oldl = " + String.valueOf(oldl) + ",oldt = " + String.valueOf(oldt));
        if(scrollListViewListener != null) {
            scrollListViewListener.onScrollChanged(this, l, t, oldl, oldt);
        }
        
    }
}
Интерфейс:

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

public interface ScrollListViewListener {
    void onScrollChanged(MyScrollListView scrollView, int x, int y, int oldx, int oldy);
}
Activity:

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

public class MyActivity extends Activity implements ScrollListViewListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.reklama);
        
        String[] data = new String[] {"один", "два", "три"/*, "четыре", "пять", "6", "7", "8",
                "9", "10", "11", "12","13", "14", "15", "16"*/};
        
        MyScrollListView list = (MyScrollListView) findViewById(R.id.listComment);
        list.setScrollListViewListener(this);
        
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),
                R.layout.my_simple_list, R.id.list_content, data);
        list.setAdapter(adapter);
    }
    
    @Override
    public void onScrollChanged(MyScrollListView scrollView, int x, int y, int oldx, int oldy) {
        Log.d("myLogs", "Работает");        
    }
    
}

Так вот, в логах, когда скролю свой список, я не вижу "Работает".

Dangreon
Сообщения: 41
Зарегистрирован: 01 янв 2013, 15:52

Re: Scroll в ListView

Сообщение Dangreon » 16 май 2013, 16:22

Все решилось гораздо проще...

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

if (list.getChildAt(position - firstVisibleItem) != null){
                top  =  list.getChildAt(position - firstVisibleItem).getTop();

Ответить