listview가 위 또는 아래로 스크롤되는지 확인하는 방법이 있습니까?목록보기가 안드로이드에서 위 또는 아래로 스크롤하는 것을 감지하는 방법은 무엇입니까?
OnScrollListener는이 경우에 도움이되지 않습니다.
미리 감사드립니다.
listview가 위 또는 아래로 스크롤되는지 확인하는 방법이 있습니까?목록보기가 안드로이드에서 위 또는 아래로 스크롤하는 것을 감지하는 방법은 무엇입니까?
OnScrollListener는이 경우에 도움이되지 않습니다.
미리 감사드립니다.
이 간단한 구현 :
lv.setOnScrollListener(new OnScrollListener() {
private int mLastFirstVisibleItem;
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if(mLastFirstVisibleItem<firstVisibleItem)
{
Log.i("SCROLLING DOWN","TRUE");
}
if(mLastFirstVisibleItem>firstVisibleItem)
{
Log.i("SCROLLING UP","TRUE");
}
mLastFirstVisibleItem=firstVisibleItem;
}
});
맨 위 항목이 더 이상 첫 번째 항목이 아닌 경우에만 유용합니다.같은 항목이 맨 위에있는 동안 앞뒤로 스크롤하면 방향을 알려주지 않습니다. – AndroidDev
ScrollViews
에는 스크롤 이동을보고하는 방법이 있습니다. onScrollChanged()
이라고합니다. 그러나 protected로 선언되므로 액세스 할 수 있도록 래퍼 클래스를 만들어야합니다. 이 방법을 사용하려면 안드로이드 문서를 확인하십시오.
첫째,
public class ReportingScrollView extends ScrollView {
private OnScrollListener onScrollListener = null;
public ReportingScrollView(Context context) {
super(context);
}
public ReportingScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ReportingScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setOnScrollListener(OnScrollListener onScrollListener) {
this.onScrollListener = onScrollListener;
}
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
super.onScrollChanged(x, y, oldx, oldy);
if (onScrollListener != null) {
onScrollListener.onScrollChanged(x, y, oldx, oldy);
}
}
}
마지막으로있는 ScrollView를, 그리고 보호 방법
public interface OnScrollListener {
void onScrollChanged(int x, int y, int oldx, int oldy);
}
노출 래퍼를 작성하고 확장 할 수있는 인터페이스를 생성, 사용자 지정보기처럼 XML 레이아웃에 포함하고, 평소와 같이 청취자를 첨부하십시오.
<your.package.ReportingScrollView />
scrollingandtrolling.setOnScrollListener(new OnScrollListener() {...});
이것은 목록에서 벗어날 때만 호출되는 것으로, 반복적으로 호출되지는 않습니다. –
일부 멍청한 놈 학생에 의해 주어진 솔루션은 좋다 : 당신이 보호 onScrollChanged (INT의 X, INT의 Y를, INT oldx 사용하는 랩퍼를 작성해야 , int oldy) 메소드를 호출합니다.이 메소드는 표준 AbsListView.OnScrollListener.onScrollStateChanged (AbsListView view, int scrollState)보다 자주 트리거됩니다.
불행히도 onScrollChanged()는 스크롤하는 방법과 상관없이 항상 매개 변수로 0을 반환하고 스크롤이 끝나면 목록의 상단이나 하단에 도달 할 때만 감지하는 것처럼 보입니다.
스크롤의 올바른 방향을 감지하기 위해 다음 코드를 사용했습니다. 첫 번째 항목의 getTop()을 사용하지만 첫 번째 항목이 더 이상 보이지 않을 때 위치를 사용합니다. 이 항목 전이 중에 스크롤 방향은 항목 위치 자체에 의해 부여됩니다. 목록이 아래로
list.setOnScrollListener(new OnScrollListener() {
int last_item;
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if(last_item<firstVisibleItem+visibleItemCount-1){
System.out.println("List is scrolling upwards");
}
else if(last_item>firstVisibleItem+visibleItemCount-1){
System.out.println("List is scrolling downwards");
}
last_item = firstVisibleItem+visibleItemCount-1;
}
});
. 누구를 위해 지금까지 여전히 코 틀린에 대한 답을 찾고
private int lastPosition = -1;
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
{
if(lastPosition == firstVisibleItem)
{
return;
}
if(firstVisibleItem > lastPosition)
{
Logger.print("Going Down");
}
else
{
Logger.print("Going Up");
}
lastPosition = firstVisibleItem;
}
쉽고 작업 솔루션을 가거나 여부를 내가 결정 마지막으로 볼 수있는 항목에 따라 다음
@Override
public void onScrollChanged(int x, int y, int oldx, int oldy) {
if(listView.getChildAt(0) != null) {
int scrollingDir = NO_SCROLLING;
int firstChildTop = listView.getChildAt(0).getTop();
if (listView.getFirstVisiblePosition() == mLastFirstVisiblePosition) {
if (mLastFirstChildTop < firstChildTop) {
//Scrolling DOWN
scrollingDir = SCROLLING_DOWN;
} else if (mLastFirstChildTop > firstChildTop) {
//Scrolling UP
scrollingDir = SCROLLING_UP;
}
} else if(listView.getFirstVisiblePosition() > mLastFirstVisiblePosition) {
//Scrolling UP
scrollingDir = SCROLLING_UP;
} else {
//Scrolling DOWN
scrollingDir = SCROLLING_DOWN;
}
mLastFirstVisiblePosition = listView.getFirstVisiblePosition();
mLastFirstChildTop = firstChildTop;
switch(scrollingDir) {
case SCROLLING_DOWN:
//Your DOWN scrolling code here
break;
case SCROLLING_UP:
//Your UP scrolling code here
break;
default:
case NO_SCROLLING:
break;
}
}
}
완벽하게 작동했습니다. 감사합니다. – error1337
이
MainListView.setOnScrollListener(object :AbsListView.OnScrollListener {
// var VisibleItem: Int = 0
override fun onScroll(p0: AbsListView?, FirstVisibleItem: Int, i2: Int, i3: Int) {
/*
if(VisibleItem < FirstVisibleItem)
{
Toast.makeText(applicationContext,"Scrolling Down",Toast.LENGTH_SHORT).show()
fab.hide()
}
if(VisibleItem >FirstVisibleItem)
{
fab.show()
Toast.makeText(applicationContext,"Scrolling Up",Toast.LENGTH_SHORT).show()
}
VisibleItem=FirstVisibleItem;
*/
}
override fun onScrollStateChanged(p0: AbsListView?, p1: Int) {
if (p1 == 1) {
fab.hide()
} else {
fab.show()
}
}
})
}
의 주석이 다른 방법을 사용하는 경우,이 작동합니다.
정확히 무엇을 원하니? uplz 더 설명 할 수 있습니다 ... –
목록이 스크롤 될 때 일부 코드를 만들고 목록이 아래로 스크롤 될 때 다른 코드를 만들고 싶습니다. 따라서 위 또는 아래로 스크롤하면 감지하고 싶습니다. – dor506
참조 http://stackoverflow.com/questions/6358428/implementation-of-onscrolllistener-to-detect-the-end-of-scrolling-in-a-listview –