1. 程式人生 > >Android 下拉重新整理與 ListView衝突問題

Android 下拉重新整理與 ListView衝突問題

當我們使用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

如有不對或不明白的地方請批評指正,共同交流學習。