如何在RecyclerView中实现更多负载?我在列表中获得500项

时间:2017-12-13 18:48:03

标签: java android android-recyclerview progress-bar nullreferenceexception

如何在Recycler视图中实现更多负载? 我在列表中获得500项,但我想限制为20项。在使用progresbar进行更多加载时,我想显示接下来的20个项目...继续流程。

在我的活动中,我将产品添加到列表

 Call<NextUrl> call = api.getSubCatogeryProducts(url);
    call.enqueue(new Callback<NextUrl>() {
        @Override
        public void onResponse(Call call, Response response) {
            progressBar.setVisibility(View.VISIBLE);
            NextUrl responseData = (NextUrl) response.body();
            String displayResponse;
            if (response.isSuccessful()) {

                displayResponse = "";

                for (int j = 0; j <20; j++) {
                     productAttributes = responseData.getProductInfoList().get(j).getProductBaseInfo().getProductAttributes();
                    sendingproducts.add(productAttributes);

                }

                mDataAdapter = new DataAdapter(sendingproducts, recyclerView);

                progressBar.setVisibility(View.GONE);
                recyclerView.setAdapter(mDataAdapter);
                Toast.makeText(TestActivity.this, "loading data", Toast.LENGTH_SHORT).show();

            } else {
                progressBar.setVisibility(View.GONE);

                Toast.makeText(TestActivity.this, "Un Successful", Toast.LENGTH_SHORT).show();

            }
            progressBar.setVisibility(View.GONE);

        }


        @Override
        public void onFailure(Call call, Throwable t) {
            progressBar.setVisibility(View.GONE);

            Toast.makeText(DashboardActivity.context, " failed to get the data", Toast.LENGTH_LONG).show();
        }
    });
}

加载更多列表器

 mDataAdapter.setOnLoadMoreListener(new OnLoadMoreListner() {
        @Override
        public void onLoadMore() {
            //add null , so the adapter will check view_type and show progress bar at bottom
            sendingproducts.add(null);
            mDataAdapter.notifyItemInserted(sendingproducts.size() - 1);

            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    //   remove progress item
                    sendingproducts.remove(sendingproducts.size() - 1);
                    mDataAdapter.notifyItemRemoved(sendingproducts.size());
                    //add items one by one
                    int start = sendingproducts.size();
                    int end = start + 20;

                    if(end<=sendingproducts.size()){
                        sendingproducts.addAll(sendingproducts.subList(start,end));
                        mAdapter.notifyItemInserted(sendingproducts.size());

                    }
                    mDataAdapter.setLoaded();
                    //or you can add all at once but do not forget to call mAdapter.notifyDataSetChanged();
                }
            }, 2000);

        }
    });


}

在适配器

 recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);

                int total = linearLayoutManager.getItemCount();
                int firstVisibleItemCount = linearLayoutManager.findFirstVisibleItemPosition();
                int lastVisibleItemCount = linearLayoutManager.findLastVisibleItemPosition();

                //to avoid multiple calls to loadMore() method
                //maintain a boolean value (isLoading). if loadMore() task started set to true and completes set to false
                if (!loading) {
                    if (total > 0)
                        if ((total - 1) == lastVisibleItemCount) {

//当达到条件时,它会在这里崩溃意味着total-1 = lastvisibleitemcount = 20 //

                            onLoadMoreListener.onLoadMore();
                        } else
                            Log.e("ok","okokokokokokoko");
                }
            }

请帮助。

1 个答案:

答案 0 :(得分:0)