向下滚动时 Android 更新 ListView

Posted

技术标签:

【中文标题】向下滚动时 Android 更新 ListView【英文标题】:Android Update ListView on scrolling down 【发布时间】:2019-06-27 22:23:36 【问题描述】:

我想在向下滚动时更新我的​​ listView 我这样做:

mConnectionList.setOnTouchListener(new View.OnTouchListener() 
        @Override
        public boolean onTouch(View v, MotionEvent event) 

            int action = event.getAction();
            switch (action) 
                case MotionEvent.ACTION_DOWN:
                    if( mConnectionList.getLastVisiblePosition() == connectionList.size()-1 )
                        getConnections();
                    
                    break;
                case MotionEvent.ACTION_UP:
                    isCrollingDown.set(false);
                    break;
                default:
            
            return false;
        
    );

但它不起作用,当我向下滚动时它会更新并在我向上滚动时更新

我也尝试这样做,但它也不起作用:

        mConnectionList.setOnScrollListener(new AbsListView.OnScrollListener() 



            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) 

            

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) 

//                Log.e("a0","a " + mConnectionList.getLastVisiblePosition());
//                if(mConnectionList.getLastVisiblePosition() == connectionList.size()-1 )
                    getConnections();
                


            
        );

【问题讨论】:

ACTION_UPACTION_DOWN 表示手指从屏幕上按压和抬起,而不是滚动 你应该为此设置 onScrollListener。 @tompok 当您使用 setOnScrollListener 时会发生什么,您的 onScrollStateChanged 是否正在执行? @BrijeshJoshi 是的正在执行 尝试将getConnections()方法放入onScroll方法中,并在其中放置一些日志并检查它是否onScroll方法以及您的方法是否正在执行? 【参考方案1】:

试试这个方法向下滚动列表视图并选择最后一行,这样它就会 滚动到视图中。

 private void scrollListBottom() 
        myListView.post(new Runnable() 
            @Override
            public void run() 
                listView.setSelection(listAdapter.getCount() - 1);
            
        );
    

myListView.setOnTouchListener(new OnTouchListener() 
  @Override
    public boolean onTouch(View v, MotionEvent event) 
     v.getParent().requestDisallowInterceptTouchEvent(true);
     return false;

);

【讨论】:

但我不想向下滚动列表,我想在用户向下滚动时注意到【参考方案2】:

你应该这样尝试。

scrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() 
    @Override
    public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY)                   
        if (scrollY > oldScrollY) 
            Log.e("SCROLL", "Scroll DOWN"+scrollY);
        
        if (scrollY < oldScrollY) 
            Log.e("SCROLL", "Scroll UP"+scrollY);
        
        if (scrollY == 0) 
            Log.e("SCROLL", "TOP SCROLL"+scrollY);
        
        if (scrollY == (v.getChildAt(0).getMeasuredHeight() - v.getMeasuredHeight())) 
            Log.e("SCROLL", "BOTTOM SCROLL"+scrollY);
        
    
);

使用它你可以检测你的滚动方向,然后更新你的列表 希望这会对你有所帮助。

【讨论】:

但我有 listView 而不是 scrollView 你可以把你的列表视图放在滚动视图中。 你可以在这里看到你的问题的解决方案-***.com/questions/16791100/…。 那我该怎么办?

以上是关于向下滚动时 Android 更新 ListView的主要内容,如果未能解决你的问题,请参考以下文章

Android ListView 在向下滚动时显示不正确的内容,然后在向上滚动时显示正确的内容

Android - 在 ListView 中滚动时滚动出/折叠元素

在Android中向上滚动ListView时加载页面

listitem中的Android listview imageview在滚动时隐藏

listitem中的Android listview imageview在滚动时隐藏

第一次进入片段ListView时AsyncTask更新progressBar的进度失败,滚动ListView后就ok了