【问题标题】:Find out if ListView is scrolled to the up?找出 ListView 是否向上滚动?
【发布时间】:2014-08-28 07:57:31
【问题描述】:

通过以下操作,我可以检查向下滚动列表视图是否完成。现在我想检查列表视图向上滚动并完成。如何获得这个事件?

@Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        if (prevVisibleItem != firstVisibleItem) {
            if (prevVisibleItem < firstVisibleItem)
                Log.e(getClass().toString(), "DOWN");
            else
                Log.e(getClass().toString(), "UP");

            prevVisibleItem = firstVisibleItem;
            /*
            * CHECK SCROLLING BUTTOM FINISH
            */

            if((firstVisibleItem + visibleItemCount) ==  totalItemCount)
            {
                Log.i("Info", "Scroll Bottom FINISH" );
            }

            /*
            * CHECK SCROLLING UP FINISH
            */
        }
    }

【问题讨论】:

  • 这可能会有所帮助...CLICKHERE
  • @TeachMeJava 链接是end of scrolling in a ListView

标签: android


【解决方案1】:
if(firstVisibleItem == 0 && !isFirstTime){
 //it is top of the list
}

在您的类isFirstTime 中定义一个变量并将其初始化为true。当用户滚动列表时 检查

if (firstVisibleItem  != 0 )
{
    isFirstTime =false;
}

这意味着用户滚动列表并且第一个元素消失了,所以如果再次

firstVisibleItem  == 0

表示列表向上滚动并结束。

【讨论】:

  • 请尝试至少包含一个简短的评论,说明你做了什么以及为什么:) 这可能有助于他理解你的原因
  • 你能简单解释一下你的答案吗?这样的小答案将来可能会被删除
  • @Bogdan Emil Maresan 可以吗?
【解决方案2】:

使用 OnSwipeTouchListener.java:

import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;

public class OnSwipeTouchListener implements OnTouchListener {

    private final GestureDetector gestureDetector = new GestureDetector(new GestureListener());

    public boolean onTouch(final View view, final MotionEvent motionEvent) {

        super.onTouch(view, motionEvent);
        return gestureDetector.onTouchEvent(motionEvent);

    }

    private final class GestureListener extends SimpleOnGestureListener {

        private static final int SWIPE_THRESHOLD = 100;
        private static final int SWIPE_VELOCITY_THRESHOLD = 100;

        @Override
        public boolean onDown(MotionEvent e) {
            return true;
        }

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

            boolean result = false;
            try {
                float diffY = e2.getY() - e1.getY();
                float diffX = e2.getX() - e1.getX();
                if (Math.abs(diffX) > Math.abs(diffY)) {
                    if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffX > 0) {
                            onSwipeRight();
                        } else {
                            onSwipeLeft();
                        }
                    }
                } else {
                    if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffY > 0) {
                            onSwipeBottom();
                        } else {
                            onSwipeTop();
                        }
                    }
                }
            } catch (Exception exception) {
                exception.printStackTrace();
            }
            return result;
        }
    }
    public void onSwipeRight() {}
    public void onSwipeLeft() {}
    public void onSwipeTop() {}
    public void onSwipeBottom() {}
}

用法:

imageView.setOnTouchListener(new OnSwipeTouchListener() {

    public void onSwipeTop() {
        Toast.makeText(MyActivity.this, "top", Toast.LENGTH_SHORT).show();
    }
    public void onSwipeRight() {
        Toast.makeText(MyActivity.this, "right", Toast.LENGTH_SHORT).show();
    }
    public void onSwipeLeft() {
        Toast.makeText(MyActivity.this, "left", Toast.LENGTH_SHORT).show();
    }
    public void onSwipeBottom() {
        Toast.makeText(MyActivity.this, "bottom", Toast.LENGTH_SHORT).show();
    }

});

【讨论】:

    【解决方案3】:

    这可能会有所帮助。我在 stackoverflow 上搜索了您的问题,我认为这个答案正是您的问题的答案。滚动完成检测。 Click Here for Full Code Answer

    private void isScrollCompleted() {
        if (this.currentVisibleItemCount > 0 && this.currentScrollState == SCROLL_STATE_IDLE) {
            /*** In this way I detect if there's been a scroll which has completed ***/
            /*** do the work! ***/
        }
    }
    

    【讨论】:

    • @TechMeJava 。如何解决currentVisibleItemCountcurrentScrollState?我的班级扩展了ListFragment
    猜你喜欢
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 2015-08-29
    相关资源
    最近更新 更多