安卓 : Hide relativelayout when scroll down on listview

标签 android android-layout android-listview onscrolllistener

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

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

enter image description here

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);
    }

最佳答案

试试这个方法

 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);

                }
        }
    }); 

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

关于安卓 : Hide relativelayout when scroll down on listview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386418/

相关文章:

android - 获取/返回由 Android Room 数据库生成的自动生成的 ID(作为主键)

java - 终结器 : Binder has been finalized, android keystore 引发的未捕获异常

android - 如何在底部应用栏上的 FloatingActionButton(fab)上方显示 Snackbar( Material 设计)

android - 在加载 ListView 时更新划掉的项目

android - 有没有在android中创建Hmac256字符串的函数?

java - 尝试将按钮放置在 ListView 下方

java - 处理自定义 View 中的布局

android - 如何从 ListView 中获取字符串并将其发送到 TextView 上的另一个 Activity

android - 尝试为 sqlite 放置图像

android - TextView 重力属性不起作用