Java Android:在listview中使用EndlessScrollListener只是在向上滚动时继续加载数据

Java Android:在listview中使用EndlessScrollListener只是在向上滚动时继续加载数据,java,android,endlessscroll,Java,Android,Endlessscroll,这是我的EndlessCrollListener.java。有没有人遇到过这样的问题:你向上滚动,它一直向右滚动到列表的顶部。我正在开发一个类似于聊天信息的应用程序,其中最新消息位于底部。因此,要查看较旧的聊天信息,用户会向上滚动,并一直向右滚动到顶部。请帮忙。仅供参考,我在listView中使用这两个属性: android:stackFromBottom=“true” android:transcriptMode=“正常” 导入android.widget.AbsListView; 导入and

这是我的EndlessCrollListener.java。有没有人遇到过这样的问题:你向上滚动,它一直向右滚动到列表的顶部。我正在开发一个类似于聊天信息的应用程序,其中最新消息位于底部。因此,要查看较旧的聊天信息,用户会向上滚动,并一直向右滚动到顶部。请帮忙。仅供参考,我在listView中使用这两个属性: android:stackFromBottom=“true” android:transcriptMode=“正常”

导入android.widget.AbsListView;
导入android.widget.AbsListView.OnScrollListener;
/*
* https://github.com/thecodepath/android_guides/wiki/Endless-Scrolling-with-AdapterViews
*/
公共抽象类EndlessCrollListener实现OnScrollListener{
//低于当前滚动位置的最小项目数
//在加载更多之前。
私有int visibleThreshold=5;
//已加载数据的当前偏移索引
private int currentPage=0;
//上次加载后数据集中的项目总数
private int previousTotalItemCount=0;
//如果仍在等待加载最后一组数据,则为True。
私有布尔加载=真;
//设置起始页索引
私有int startingPageIndex=0;
私有布尔反向=false;
public endlesscrollstener(){
}
公共EndlessScrollListener(int VisibleSThreshold){
this.visibleThreshold=visibleThreshold;
}
公共EndlessScrollListener(int VisibleSThreshold,布尔反向){
this.visibleThreshold=visibleThreshold;
这个。反向=反向;
}
公共EndlessScrollListener(int VisibleSThreshold,int startPage){
this.visibleThreshold=visibleThreshold;
this.startingPageIndex=startPage;
this.currentPage=起始页;
}
//在滚动过程中,这种情况在一秒钟内会发生很多次,因此请小心放置在此处的代码。
//我们得到了一些有用的参数,以帮助我们确定是否需要加载更多数据,
//但首先我们检查是否在等待前一次加载完成。
@凌驾
public void onScroll(AbsListView视图、int firstVisibleItem、int visibleItemCount、int totalItemCount){
//如果项目总数为零,而前一个不是,则假定
//列表无效,应重置回初始状态
if(totalItemCountpreviousTotalItemCount)){
加载=假;
previousTotalItemCount=totalItemCount;
currentPage++;
}
//如果相反,则firstVisibleItem计算错误
如果(反向){
firstVisibleItem=totalItemCount-firstVisibleItem;
}
//如果当前未加载,我们将检查是否已违反
//VisibleSThreshold已关闭,需要重新加载更多数据。
//如果确实需要重新加载一些数据,则执行onLoadMore来获取数据。

如果(!loading&&(totalItemCount-visibleItemCount)我已经通过使用以下代码解决了这个问题

    if (view.isStackFromBottom()) {
        if (!loading && firstVisibleItem == 0 ) {
            onLoadMore(currentPage + 1, totalItemCount);
            loading = true;
        }
    }

    else if (!loading && (totalItemCount - visibleItemCount)<=(firstVisibleItem + visibleThreshold)) {
        onLoadMore(currentPage + 1, totalItemCount);
        loading = true;
    }
    if (view.isStackFromBottom()) {
        if (!loading && firstVisibleItem == 0 ) {
            onLoadMore(currentPage + 1, totalItemCount);
            loading = true;
        }
    }

    else if (!loading && (totalItemCount - visibleItemCount)<=(firstVisibleItem + visibleThreshold)) {
        onLoadMore(currentPage + 1, totalItemCount);
        loading = true;
    }
    ListItemObject firstObject = mAdapter.getItem(0);
    mAdapter.addAll(0, resultsObject);

    int index = mAdapter.indexOf(firstObject);
                    // Scroll to the previous first item position to avoid
                    // Calling onLoadMore again
     if (index != -1) {
              mMessagesListView.setSelection(index);
     }