huxq17 / XRefreshView

一个万能的android下拉上拉刷新的框架,完美支持recyclerview
1.7k stars 501 forks source link

listview上拉加载有bug #69

Closed 1079107009 closed 7 years ago

1079107009 commented 7 years ago

`public class ListViewActivity extends Activity { private ListView lv; private List str_name = new ArrayList(); private XRefreshView refreshView; private ArrayAdapter adapter; public static long lastRefreshTime; private boolean isBottom; private int lastVisibleItem;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_listview);
    for (int i = 0; i < 15; i++) {
        str_name.add("数据" + i);
    }
    lv = (ListView) findViewById(R.id.lv);
    refreshView = (XRefreshView) findViewById(R.id.custom_view);

    adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, str_name);
    lv.setAdapter(adapter);

    // 设置是否可以下拉刷新
    refreshView.setPullRefreshEnable(true);
    // 设置是否可以上拉加载
    refreshView.setPullLoadEnable(true);
    // 设置上次刷新的时间
    refreshView.restoreLastRefreshTime(lastRefreshTime);

// refreshView.setSilenceLoadMore(); // 设置时候可以自动刷新 // refreshView.setAutoRefresh(false); refreshView.setOnBottomLoadMoreTime(new OnBottomLoadMoreTime() { @Override public boolean isBottom() { return isBottom; } });

    refreshView.setXRefreshViewListener(new SimpleXRefreshListener() {
        @Override
        public void onRefresh(boolean isPullDown) {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    lastRefreshTime = refreshView.getLastRefreshTime();
                    adapter.notifyDataSetChanged();
                    refreshView.stopRefresh();
                }
            }, 1000);
        }

        @Override
        public void onLoadMore(boolean isSilence) {
            new Handler().postDelayed(new Runnable() {

                @Override
                public void run() {
                    refreshView.stopLoadMore();
                }
            }, 1000);
        }

        @Override
        public void onRelease(float direction) {
            super.onRelease(direction);
            if (direction > 0) {
                toast("下拉");
            } else {
                toast("上拉");
            }
        }
    });
    refreshView.setOnAbsListViewScrollListener(new OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            LogUtils.i("onScrollStateChanged" + scrollState + "-----------" + view.getCount());

            if (scrollState == SCROLL_STATE_IDLE) {
                isBottom = lastVisibleItem == (view.getCount() - 1);
            }
        }
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                             int visibleItemCount, int totalItemCount) {
            LogUtils.i("onScroll");
            lastVisibleItem = view.getLastVisiblePosition();
            Log.e("onScrolllastVisibleItem", totalItemCount + "-------" + lastVisibleItem + "----------" + isBottom);
        }
    });
}

public void toast(String msg) {
    Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
}

} <com.andview.refreshview.XRefreshView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xrefreshview="http://schemas.android.com/apk/res-auto" android:id="@+id/custom_view" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff" android:orientation="vertical" xrefreshview:isHeightMatchParent="true" xrefreshview:isWidthMatchParent="true">

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

</com.andview.refreshview.XRefreshView>` 上拉加载有bug,我认为是你的XRefreshContentView类中onScrollStateChanged有问题。

huxq17 commented 7 years ago

有什么bug

1079107009 commented 7 years ago

你看我的判断是否滑动到底部没问题吧?但是运行时还未滑动到底部,就加载更多了。

huxq17 commented 7 years ago

你判断有问题。。。

huxq17 commented 7 years ago

你可以看看加载更多的时候,listview最后一个item有没有显示出来,如果显示出来了,那就是没问题的。

1079107009 commented 7 years ago

没有显示出来。

huxq17 commented 7 years ago

你写个有问题的demo,发上来看看吧

1079107009 commented 7 years ago

你把我发的代码,替换你demo里的listviewactivity就可以了。

huxq17 commented 7 years ago

找到问题了,你的判断错误的,又使用了下面的代码,导致了错误的效果。 refreshView.setOnBottomLoadMoreTime(new OnBottomLoadMoreTime() { @Override public boolean isBottom() { return isBottom; } });

huxq17 commented 7 years ago

你把那两行代码注释掉,再看看效果

1079107009 commented 7 years ago

好的,我现在在吃饭,回去试试,等会告诉你结果

1079107009 commented 7 years ago

我试了,注释掉是不会出现那个bug,但是这样做有个问题,如果数据不满屏,上拉可以加载更多,感觉不是很好。

huxq17 commented 7 years ago

那你可以在不满屏的时候把上拉加载给禁止掉