Android 下拉重新整理與 ListView衝突問題
阿新 • • 發佈:2019-01-29
當我們使用RefreshLayout巢狀ListView進行下拉重新整理時,有時候會出現listview可以上拉到底,但是下拉時就會進行重新整理操作,而不是滑動listview了。
出現這種問題的原因是在RefreshLayout控制元件中,只能夠放ListView或者LinearLayout單一控制元件,當RefreshLayout中放兩個或多個並列佈局時,就會出現滑動衝突問題。
如下佈局:
<com.test.custompulltorefresh.RefreshLayout
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#303030">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/listView"
android:background="@android:color/background_light"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>
</com.test.custompulltorefresh.RefreshLayout>
因為Listview外部還包這一層LinearLayout,所以就會出現以上這種情況。
那麼怎麼解決這種呢,就是根據RefreshLayout已經封裝的方法,給listview設定setOnScrollListener
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
Log.e(TAG, "onScrollStateChanged");
//判斷ListView是否滑動到第一個Item的頂部
if (view.getChildCount() > 0 && view.getFirstVisiblePosition() == 0
&& view.getChildAt(0).getTop() >= view.getPaddingTop()) {
//解決滑動衝突,當滑動到第一個item,下拉重新整理才起作用
refreshLayout.setEnabled(true);
} else {
refreshLayout.setEnabled(false);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
這樣就可以避免以上的衝突問題。
另附程式碼Demo,稍微修改就可以。Demo
如有不對或不明白的地方請批評指正,共同交流學習。