首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android ListView 實現上拉加載更多不重置滾動位置

     編輯:程式設計綜合問答

常見錯誤

在 onScroll 或觸摸事件中檢測到達底部後,直接呼叫 initGoodsList() 重新 setAdapter,導致 ListView 重置到頂部,使用者體驗極差。

正確做法:更新資料源後呼叫 notifyDataSetChanged

// 觸發加載更多的邏輯(例如在 OnScrollListener.onScrollStateChanged 中)
if (lastVisibleItem == totalItemCount - 1 && !isLoading) {
    isLoading = true;
    pageIndex++;
    loadMoreData(pageIndex, new Callback() {
        @Override
        public void onResult(List newItems) {
            // 1. 將新資料追加到現有資料源
            dataList.addAll(newItems);
            // 2. 通知適配器資料已變更,ListView 會保持滾動位置
            adapter.notifyDataSetChanged();
            isLoading = false;
        }
    });
}

關鍵點總結

  • 不要重新 setAdapter,否則會重置滾動位置與視圖回收機制。
  • 資料源建議使用 ArrayList 並只做 addAll 操作。
  • 若使用 CursorAdapter,需呼叫 changeCursor 或 notifyDataSetChanged。
  • 考慮升級至 RecyclerView,配合 LinearLayoutManager 與 OnScrollListener 實現更流暢的分頁加載。

採用「資料源追加 + notifyDataSetChanged」模式,即可實現無感知的上拉加載更多。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved