如何解决如何使用 JSON API 在 recyclerview 滚动上加载更多数据
我想在 Recyclerview 滚动上加载下一页数据(当用户滚动到底部时)。我再次调用 API 以获取下一页数据并通知适配器,但似乎我做错了什么。请帮助我解决此代码的问题。
This is my previous question where all code pasted
这是片段类。
public class LeadsFragment extends Fragment {
boolean isLoading = false;
RecyclerView recyclerView;
LeadsAdapter leadsAdapter;
ArrayList<LeadModel> rowsArrayList = new ArrayList<>();
RecyclerView.LayoutManager layoutManager;
private static final String url = "myurl";
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_leads,container,false);
StringRequest stringRequest = new StringRequest(url,new Response.Listener<String>() {
@Override
public void onResponse(String response) {
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
LeadModel leadModelList = gson.fromJson(response,LeadModel.class);
for (int i = 0; i < leadModelList.getData().size(); i++) {
rowsArrayList.add(leadModelList);
}
recyclerView.setHasFixedSize(true);
layoutManager = new linearlayoutmanager(getActivity());
recyclerView.setLayoutManager(layoutManager);
leadsAdapter = new LeadsAdapter(getContext(),rowsArrayList,recyclerView);
recyclerView.setAdapter(leadsAdapter);
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getContext(),error.toString(),Toast.LENGTH_SHORT).show();
}
});
RequestQueue queue = Volley.newRequestQueue(getContext());
queue.add(stringRequest);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView,int dx,int dy) {
super.onScrolled(recyclerView,dx,dy);
linearlayoutmanager linearlayoutmanager = (linearlayoutmanager) recyclerView.getLayoutManager();
if (!isLoading) {
if (linearlayoutmanager != null && linearlayoutmanager.findLastCompletelyVisibleItemPosition() == 10 - 1) {
// Last item reached
loadMore(); // Note this method
isLoading = true;
}
}
}
});
return view;
}
private void loadMore() {
StringRequest stringRequest = new StringRequest(url + "?page=2",LeadModel.class);
for (int i = 0; i < leadModelList.getData().size(); i++) {
rowsArrayList.add(leadModelList);
}
leadsAdapter.notifyDataSetChanged();
isLoading = false;
}
},Toast.LENGTH_SHORT).show();
}
});
RequestQueue queue = Volley.newRequestQueue(getContext());
queue.add(stringRequest);
}
}
解决方法
这更好用,因为自从我开始在 android 上工作以来我就没有使用过 Volley 库。但这是一个如何实现分页的示例
在您的 XML 中
<androidx.core.widget.NestedScrollView
android:id="@+id/NestedScroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/HomeRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:nestedScrollingEnabled="true"
tools:listitem="@layout/home_recycler_list_layout" />
<ProgressBar
android:id="@+id/ProgressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"/>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
和你的班级
ArrayList<LeadModel> rowsArrayList = new ArrayList<>();
SwipeRefreshLayout SwipeDown;
ProgressBar progressBar;
NestedScrollView nestedScrollView;
int Page = 0;
LeadsAdapter leadsAdapter;
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
nestedScrollView = findViewById(R.id.NestedScroll);
progressBar = findViewById(R.id.ProgressBar);
recyclerView= findViewById(R.id.HomeRecycler);
nestedScrollView.setOnScrollChangeListener(new
NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v,int scrollX,int scrollY,int oldScrollX,int oldScrollY) {
if (scrollY == v.getChildAt(0).getMeasuredHeight() - v.getMeasuredHeight()) {
Page++;
progressBar.setVisibility(View.VISIBLE);
getData(Page);
}
}
});
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
leadsAdapter = new LeadsAdapter(getContext(),rowsArrayList,recyclerView);
recyclerView.setAdapter(leadsAdapter);
getData(Page);
}
private void getData(int Page) {
StringRequest stringRequest = new StringRequest(url + "?page="+Page,new Response.Listener<String>() {
@Override
public void onResponse(String response) {
progressBar.setVisibility(View.INVISIBLE);
// set Progress dialog Visibility to INVISIBLE or GONE if response is success
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
LeadModel leadModelList = gson.fromJson(response,LeadModel.class);
for (int i = 0; i < leadModelList.getData().size(); i++) {
rowsArrayList.add(leadModelList);
}
leadsAdapter.notifyDataSetChanged();
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getContext(),error.toString(),Toast.LENGTH_SHORT).show();
}
});
RequestQueue queue = Volley.newRequestQueue(getContext());
queue.add(stringRequest);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。