Страница 1 из 1
Scroll в ListView
Добавлено: 10 май 2013, 21:48
Dangreon
Возник вопрос, мне необходимо отслеживать, на какую величину в dp, прокручивается ListView, чтобы на это соответствующим образом реагировать.
Но никак не могу выяснить, как это можно отслеживать. Кто-нибудь знает ?
Re: Scroll в ListView
Добавлено: 10 май 2013, 22:01
xr0m
Используй событие
@Override
public void onScroll(AbsListView absListView, int firstVisible, int visibleCount, int totalCount) {
//firstvisible is your first visible item in the list
}
Re: Scroll в ListView
Добавлено: 10 май 2013, 23:26
Dangreon
и как в дипах можно отмерить?)
Re: Scroll в ListView
Добавлено: 10 май 2013, 23:35
rezak90
У ScrollView есть метод onScrollChanged в который приходят координаты по Х и У смены позиции, узнаём разницу это будет пиксели, ну а пиксели преобразовать в дипы не составит труда.
Re: Scroll в ListView
Добавлено: 11 май 2013, 08:46
xr0m
Dangreon писал(а):и как в дипах можно отмерить?)
высоту в дип для каждого элемента Вам известно, умножаем номер элемента на высоту.
Re: Scroll в ListView
Добавлено: 11 май 2013, 09:58
Dangreon
Мне нужно прокручивать и измерять ListView! А не ScrollView. Так как же это можно сделать?
Re: Scroll в ListView
Добавлено: 11 май 2013, 11:30
xr0m
Dangreon писал(а):Мне нужно прокручивать и измерять ListView! А не ScrollView. Так как же это можно сделать?
можно прочитать документацию )
OnScrollListener
onScrollChanged
onScrollChanged наследуется от вью.
Re: Scroll в ListView
Добавлено: 11 май 2013, 12:51
Dangreon
Ок! И как вызвать этот метод onScrollChanged для ListView ?
Re: Scroll в ListView
Добавлено: 11 май 2013, 13:07
Foenix
он не вызывается, он обрабатывается
Re: Scroll в ListView
Добавлено: 11 май 2013, 13:34
Dangreon
Ваш ответ не по существу.
Re: Scroll в ListView
Добавлено: 11 май 2013, 16:25
Dangreon
У ScrollView есть метод onScrollChanged в который приходят координаты по Х и У смены позиции, узнаём разницу это будет пиксели, ну а пиксели преобразовать в дипы не составит труда.
Как добраться до этого метода?
Re: Scroll в ListView
Добавлено: 11 май 2013, 18:37
Foenix
Re: Scroll в ListView
Добавлено: 11 май 2013, 21:46
rezak90
я дал ответ, что тебе в нём не понятно?
Re: Scroll в ListView
Добавлено: 12 май 2013, 17:09
Dangreon
Я сделал как подсказал Foenix, унаследовался от ListView создав свой MyListView, перегрузил метод onScrollChanged, добавил метод установки слушателя, реализовал интерфейс в активити. Проблема в том, когда я ставлю в этот метод
логирование (Log.d(вывести параметры которые приходят в метод)) то в лог ничего не идет. Выходит когда я скролю пальцем свой список, этот метод не вызывается. Хм.
Re: Scroll в ListView
Добавлено: 12 май 2013, 20:05
Foenix
Так ничего не понять, нужно коды выкладывать, логи.. может кто-то увидит в чем ошибка..
Re: Scroll в ListView
Добавлено: 12 май 2013, 20:09
rezak90
Я сделал как подсказала Foenix, унаследовался от ListView создав свой MyListView, перегрузил метод onScrollChanged
я тоже самое предлагал, может не доходчиво объяснил
Так ничего не понять, нужно коды выкладывать, логи.. может кто-то увидит в чем ошибка..
+
Re: Scroll в ListView
Добавлено: 14 май 2013, 11:05
Dangreon
Код: Выделить всё
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", "Работает");
}
}
Так вот, в логах, когда скролю свой список, я не вижу "Работает".
Re: Scroll в ListView
Добавлено: 16 май 2013, 16:22
Dangreon
Все решилось гораздо проще...
Код: Выделить всё
if (list.getChildAt(position - firstVisibleItem) != null){
top = list.getChildAt(position - firstVisibleItem).getTop();