【问题标题】:Android : Hide relativelayout when scroll down on listviewAndroid:在列表视图上向下滚动时隐藏相对布局
【发布时间】:2014-08-14 16:52:20
【问题描述】:

当用户开始在列表视图中向下滚动时,我尝试添加相对布局。 当用户滚动到顶部并显示列表视图的第一项时,我想再次显示相对布局。

我的代码有效,但是当用户尝试滚动时会有一点“爬升”。 我认为问题出在 listAtTop 函数上,但我不知道在哪里。

list.setOnDetectScrollListener(new OnDetectScrollListener() {
                @Override
                public void onUpScrolling() {
                    /* do something */
                    Log.d("INFO", "UPPPPPPPPPPP");
                    if (listIsAtTop()) {
                        RelativeLayout relative1 = (RelativeLayout) findViewById(R.id.relative1);
                        relative1.setVisibility(View.VISIBLE);
                    }
                }

                @Override
                public void onDownScrolling() {
                    /* do something */
                    Log.d("INFO", "DOWNNNNNNNN");
                    if (!listIsAtTop()) {
                        RelativeLayout relative1 = (RelativeLayout) findViewById(R.id.relative1);
                        relative1.setVisibility(View.GONE);
                    }

                }
            });


private boolean listIsAtTop()   {   
        if (list.getChildCount() == 0) {
            return true;
        }
        return list.getFirstVisiblePosition() == 0 && (list.getChildCount() == 0 || list.getChildAt(0).getTop() == 0);
    }

【问题讨论】:

    标签: android android-layout android-listview onscrolllistener


    【解决方案1】:

    试试这个方法

     list.setOnScrollListener(new OnScrollListener() {
    
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                }
            int mPosition=0;
            int mOffset=0;
    
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                // TODO Auto-generated method stub
                 int position = list.getFirstVisiblePosition();
                   View v = list.getChildAt(0);
                    int offset = (v == null) ? 0 : v.getTop();
    
                    if (mPosition < position || (mPosition == position && mOffset < offset)){
                         // Scrolled up 
                         //search_layout.setVisibility(View.GONE);
    
                    } else {
                         // Scrolled down
                         //search_layout.setVisibility(View.VISIBLE);
    
                    }
            }
        }); 
    

    在此代码中,当您滚动 down 时隐藏布局,当您向上滚动并到达 top 时,则可见布局

    【讨论】:

    • 谢谢,但您的代码似乎不起作用。我从不进入 onScrollStateChanged 函数..
    • @wawanopoulos 仔细检查它,因为它在我的情况下工作正常。
    • 好的,我再检查一下
    • 我不明白为什么我从不进入 onScrollStateChanged 和 onScroll 函数。有什么代码要加吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    相关资源
    最近更新 更多