ListView使用SmoothRefreshLayout向上滚动错误

时间:2017-10-17 14:58:23

标签: java android listview

我已经在我的应用程序中实现了SmoothRefreshLayout库,该库目前有一个简单的ListView。 当我向下滚动ListView时会出现问题,当我尝试到达顶部时,而不是向上滚动,它会调用Refresh监听器。因此运动陷入困境。

这是activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<me.dkzwm.widget.srl.SmoothRefreshLayout

    android:id="@+id/smoothRefreshLayout"
    android:layout_width="match_parent"

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_centerInParent="true"
        android:indeterminateDrawable="@drawable/circular_spinner" >
    </ProgressBar>

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/lv"

        />
</RelativeLayout>
</me.dkzwm.widget.srl.SmoothRefreshLayout>

这是onCreate中的RefreshListener的一部分:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().setTitle("");
        setContentView(R.layout.activity_main);

        refreshLayout = (SmoothRefreshLayout)findViewById(R.id.smoothRefreshLayout);
        refreshLayout.setHeaderView(new MyCustomHeader(this));

        refreshLayout.setEnabled(true);
        refreshLayout.setOnRefreshListener(new RefreshingListenerAdapter() {
            @Override
            public void onRefreshBegin(boolean isRefresh) {

                if (isNetworkAvailable(MainActivity2.this)) {
                    isRef = true;
                    new upd().execute();
                } else {
                    Toast.makeText(MainActivity2.this, getResources().getString(R.string.err_conn), Toast.LENGTH_SHORT).show();
                }

            }

        });

1 个答案:

答案 0 :(得分:0)

我知道自我回复是没有意义的,但它可能对其他人有所帮助。 无论如何,解决方案很简单,我刚刚实现了一个onScrollListener并检查了第一项是否在顶部,如果不是只是禁用刷新器。

listView.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {

            }

            @Override
            public void onScroll(AbsListView listView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                int rowpos = (listView == null || listView.getChildCount() == 0) ?
                        0 : listView.getChildAt(0).getTop();
                refreshLayout.setEnabled((rowpos >= 0));
            }
        });

致谢:Can't scroll in a ListView in a swipeRefreshLayout