检测列表视图顶部滚动

问题描述 投票:0回答:2

我想检测列表视图的顶部,我使用了这个方法。

@Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                if (firstVisibleItem == 0)
                    swipeRefreshLayout.setEnabled(true);
                else
                    swipeRefreshLayout.setEnabled(false);
            }

这个方法很好用,但问题是我把Header View也附加到了list上,当我向上滚动时,只要第一个项目是可见的(不是Header View),它就会调用pull来刷新list视图。当我向上滚动时,只要第一个项目可见(不是头视图),它就会调用拉动来刷新列表视图。我怎样才能检测到列表的头是完全可见的呢?

View imageSlider = inflater.inflate(R.layout.image_slider_layout, null, false);
findViewById(imageSlider);

mPullRefreshListView.addHeaderView(imageSlider);

private void findViewById(View view) {
        mViewPager = (ViewPager) view.findViewById(R.id.view_pager);
        mIndicator = (CirclePageIndicator) view.findViewById(R.id.indicator);
    }
android android-listview
2个回答
4
投票

嗯,有趣的答案在于onTouch监听器,而不是onScroll,请看下面的实现,它准确地告诉你什么时候头是完全可见的,你可以进一步完善逻辑......这只是我的一个快速实现。

    // Set a on touch listener for your list
    mList.setOnTouchListener(new OnTouchListener(){

        @Override
        public boolean onTouch(View v, MotionEvent event) {
           // get the top of  first child
            View mView = mList.getChildAt(0);
            int top = mView.getTop();


            switch(event.getAction()){

            case MotionEvent.ACTION_MOVE:
                // see if it top is at Zero, and first visible position is at 0
                if(top == 0 && mList.getFirstVisiblePosition() == 0){
                    Toast.makeText(MainActivity.this, "Header Item Visible", 
                            Toast.LENGTH_SHORT).show();
                }
            }
            // dont forget to retrun false here
            return false;
        }

    });

1
投票

你也可以在onScroll Listener中用visibleitemCount简单地识别它。

首先确定你的listview的可见项数,在listview的顶部,包括头部。你可以通过烤面包或调试代码来获得这个计数。

在我的例子中,我的listview的正常可见项数是3,而顶部的可见项数是2(包括headerview),那么我的代码对我来说是有效的。

 @Override
        public void onScroll(AbsListView view, int firstVisibleItem, 
                                int visibleItemCount, int totalItemCount) {
            if(firstVisibleItem==0&&visibleItemCount==2)
            {
                swp.setEnabled(true);
            }
            else{
                swp.setEnabled(false);
            }

        }
© www.soinside.com 2019 - 2024. All rights reserved.