2014-09-01 19 views
0

如果我沒有像以前那樣設置OnScrollListener,ListView中的頂部視圖會在滾動到列表底部然後向上之後被切斷。如何使用GridView/ListView實現SwipeRefreshLayout而不會截斷視圖?

設置OnScrollListener如下似乎工作,但這似乎很奇怪,這是必需的。我希望Google能夠解決這個問題,而不必設置這個監聽器。有任何想法嗎?

mListView.setOnScrollListener(new OnScrollListener() { 

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

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

      if (firstVisibleItem == 0 && visibleItemCount > 0 && absListView.getChildAt(0).getTop() >= 0) { 
       mSwipeToRefreshLayout.setEnabled(true); 
      } else { 
       mSwipeToRefreshLayout.setEnabled(false); 
      } 
     } 
    }); 
} 

回答

6

我遇到了類似的情況,並且覆蓋canChildScrollUp方法修復了我。當您使用含有ListViewGridView且編號爲android.R.id.listSwipeRefreshLayout時,只需使用以下內容即可。

import android.content.Context; 
import android.support.v4.widget.SwipeRefreshLayout; 
import android.util.AttributeSet; 


/** 
* Date: 09/02/2014 
* @author: rax 
*/ 
public class ScrollableSwipeRefreshLayout extends SwipeRefreshLayout { 

    public ScrollableSwipeRefreshLayout(Context context) { 
     super(context); 
    } 

    public ScrollableSwipeRefreshLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean canChildScrollUp() { 
     // Condition to check whether scrollview reached at the top while scrolling or not 
     return findViewById(android.R.id.list).canScrollVertically(-1); 
    } 
} 
相關問題