在 onScroll 或觸摸事件中檢測到達底部後,直接呼叫 initGoodsList() 重新 setAdapter,導致 ListView 重置到頂部,使用者體驗極差。
// 觸發加載更多的邏輯(例如在 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;
}
});
}
ArrayList 並只做 addAll 操作。CursorAdapter,需呼叫 changeCursor 或 notifyDataSetChanged。LinearLayoutManager 與 OnScrollListener 實現更流暢的分頁加載。採用「資料源追加 + notifyDataSetChanged」模式,即可實現無感知的上拉加載更多。