當前位置:成語大全網 - 新華字典 - 詢問如何完成recyclerview預加載。

詢問如何完成recyclerview預加載。

需求的依賴性

以下版本會自我更新。

編譯“com . Android . support:app compat-V7:21 . 0 . 0”

編譯“com . Android . support:recycler view-V7:21 . 0 . 0”

編譯“com . Android . support:cardview-V7:21 . 0 . 0”

編譯“com . Android . support:support-v4:21 . 0 . 0”

有待解決的問題

[x]下拉刷新

[x]自動裝載

[x]網絡請求異步加載

技術處理

下拉以刷新

采用安卓系統。support . v4 . widget . swiperefreshlayout來實現。

具體可以搜索這個類。根據官方文件,布局如下。

& lt查看xmlns:Android = "/apk/RES/Android "

Android:id = " @+id/swipeRefreshLayout "

class = " Android . support . v4 . widget . swiperefreshlayout "

Android:layout _ width = " match _ parent "

Android:layout _ height = " match _ parent " & gt;

& lt查看xmlns:Android = "/apk/RES/Android "

android:id="@+id/recylerView "

class = " Android . support . V7 . widget . recycle view "

Android:layout _ width = " wrap _ content "

Android:layout _ height = " wrap _ content " & gt;& lt/view & gt;

& lt/view & gt;

然後為swipeRefreshLayout設置監視。

swipeRefreshLayout . setonrefresh listener(新的SwipeRefreshLayout。OnRefreshListener() {

@覆蓋

public void onRefresh() {

如果(正在刷新){

Log.d(標簽,“忽略手動更新!”);

}否則{

load page();

}

}

});

半自動的

recycle view是新生事物,擴展方找不到endless-recycle view這樣的開源神器,只好自己找方法。和ListView壹樣,他們還是重寫了OnScrollListener的方法。

recyclerView . setonscrolllistener(新recycler view。onscrollistener(){

@覆蓋

公共void on scrolled(RecyclerView RecyclerView,int dx,int dy) {

super.onScrolled(recyclerView,dx,dy);

int lastVisibleItem =((linearrayoutmanager)mLayoutManager)。findLastVisibleItemPosition();

int totalItemCount = mlayoutmanager . getitemcount();

//lastVisibleItem & gt;= totalItemCount-4表示其余四項自動加載,您可以自由選擇。

//dy & gt;0表示向下滑動。

if(lastVisibleItem & gt;totalItemCount-4 & amp;& ampdy & gt0) {

if(isLoadingMore){

Log.d(標簽,“忽略手動更新!”);

}否則{

load page();//這裏多線程也需要手動控制isLoadingMore。

isLoadingMore = false

}

}

}

});

如果想用GridView,可以試試這個。請註意,示例中的span_count =2。

@覆蓋

公共void on scrolled(RecyclerView RecyclerView,int dx,int dy) {

super.onScrolled(recyclerView,dx,dy);

int[]visible items = mlayoutmanager . findlastvisibleitempositions(null);

int last item = math . max(visible items[0],visible items[1]);

Log.d(標簽," visible items = "+visible items);

Log.d(標簽," last item = "+last item);

Log.d(TAG," adapter . getitem count()= "+adapter . getitem count());

if(dy & gt;0 & amp& amplastitem & gtadapter . getitemcount()-5 & amp;& amp!isLoadingMore) {

Log.d(標簽,“將加載new feeds”);

}

}

正文//布萊克斯威夫特(簡的作者)