ListView,GridView和ScrollVIew巢狀實現上拉載入更多
阿新 • • 發佈:2019-02-02
這個問題找了好幾天,網上沒有直接的答案,今天寫在這裡希望能幫到人,剛寫部落格,樣式什麼的就不看了,簡單易懂好貼上才是你們需要的!
不對的地方請在評論指正,謝謝!
首先說下ListView,GridView和ScrollVIew巢狀問題,自定義一個ListView或GridView,重寫onMeasure()方法兩行程式碼解決問題
程式碼使用直接貼上就OK 這個程式碼解決了巢狀滑動衝突的問題,原理是這個程式碼禁用了ListView或GridView本身的滑動功能,強制它們的item全部顯示。 那麼問題來了:ListView的滑動監聽怎麼辦?上拉載入呢? 答案是:沒有滑動,監聽無效,因此你想實現上拉載入需要靠ScrollView的滑動監聽來做。 但ScrollView本身是沒有監聽事件的,所以,你只能自定義了。 在ScrollView中有個方法,onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) 這個方法有四個引數 這個方法是沒有暴露出來的所以需要自己寫個介面呼叫在自定義ScrollView中新增以下方法@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // TODO 自動生成的方法存根 int expandSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); }
然後在用的地方呼叫就可以 沒有原始碼,沒有Demo,你需要的只是Ctrl+C和Ctrl+V。@Override protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) { super.onOverScrolled(scrollX, scrollY, clampedX, clampedY); if (scrollY>0&&onScrollToBottomListener!=null){ onScrollToBottomListener.onScrollBottomListener(clampedY); } } public void setOnScrollToBottomLintener(OnScrollToBottomListener listener){ onScrollToBottomListener = listener; } public interface OnScrollToBottomListener { void onScrollBottomListener(boolean isBottom); }