Android 如何使用Recycleview无限滚动加载更多内容? 如何使用Recycleview无限滚动加载更多内容
当用户滚动动态数据自动获取和显示时,如何以无限方式显示结果。因此,加载时间和应用程序将正常工作Android 如何使用Recycleview无限滚动加载更多内容? 如何使用Recycleview无限滚动加载更多内容,android,android-recyclerview,Android,Android Recyclerview,当用户滚动动态数据自动获取和显示时,如何以无限方式显示结果。因此,加载时间和应用程序将正常工作 文件名:MainActivity.java//我想显示的主java文件加载更多 package com.ejobbox.ejobbox; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7
文件名:MainActivity.java//我想显示的主java文件加载更多
package com.ejobbox.ejobbox;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import java.util.ArrayList;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private ProgressBar progressBar;
private LinearLayoutManager mLayoutManager;
private RecyclerViewAdapter adapter;
private ArrayList<Model> list;
private String baseURL="http://mywebsite.com/";
public static List<WPPost> mListPost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView= findViewById(R.id.recycler_view);
progressBar=findViewById(R.id.progressbar);
mLayoutManager=new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(mLayoutManager);
list=new ArrayList<Model>();
// call retrofit
getRetrofit();
adapter=new RecyclerViewAdapter(list,MainActivity.this);
recyclerView.setAdapter(adapter);
}
private void getRetrofit(){
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(baseURL)
.addConverterFactory(GsonConverterFactory.create())
.build();
RetrofitArrayApi service = retrofit.create(RetrofitArrayApi.class);
Call<List<WPPost>> call= service.getPostInfo();
call.enqueue(new Callback<List<WPPost>>() {
@Override
public void onResponse(Call<List<WPPost>> call, Response<List<WPPost>> response) {
Log.e("mainactivty","response"+ response.body());
progressBar.setVisibility(View.GONE);
for(int i=0; i<response.body().size();i++){
Log.e ("main","Title"+ response.body().get(i).getTitle().getRendered()+" "+
response.body().get(i).getId());
String tempdetails=response.body().get(i).getExcerpt().getRendered().toString();
tempdetails=tempdetails.replace("<p>","");
tempdetails=tempdetails.replace("</p>","");
String linkdetail=response.body().get(i).getLink().toString();
String date=response.body().get(i).getDate().toString();
list.add(new Model(Model.IMAGE_TYPE, response.body().get(i).getTitle().getRendered(),
tempdetails,date,
response.body().get(i).getLinks().getWpFeaturedmedia().get(0).getHref(),linkdetail) );
}
adapter.notifyDataSetChanged();
}
@Override
public void onFailure(Call<List<WPPost>> call, Throwable t) {
}
});
}
}
package com.ejobbox.ejobbox;
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.support.v7.widget.LinearLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.text.format.DateFormat;
导入android.util.Log;
导入android.view.view;
导入android.widget.ProgressBar;
导入java.util.ArrayList;
导入java.util.List;
2.电话;;
2.回拨;
2.回应;;
进口改装2.改装;
进口改装2.converter.gson.GsonConverterFactory;
公共类MainActivity扩展了AppCompatActivity{
私人回收站;
私人ProgressBar ProgressBar;
私人直线酒店经理;
专用循环水适配器;
私有数组列表;
专用字符串baseURL=”http://mywebsite.com/";
公共静态列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=findViewById(R.id.recycler\u视图);
progressBar=findViewById(R.id.progressBar);
mLayoutManager=新的LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(mLayoutManager);
列表=新的ArrayList();
//呼叫改造
getReformation();
适配器=新的RecycleServiceAdapter(列表,MainActivity.this);
recyclerView.setAdapter(适配器);
}
私有网络改造(){
改装改装=新改装.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
RefundationArrayAPI服务=Refundation.create(RefundationArrayAPI.class);
Call=service.getPostInfo();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Log.e(“maintactivty”,“response”+response.body());
progressBar.setVisibility(View.GONE);
对于(int i=0;i不要使用无限滚动,它不会按预期工作
你可以用这个
recyclerView.addOnScrollListener(new OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if (isLastItemDisplaying())
{
scrollCount=scrollCount+10;
L.v("scroll count",""+recyclerView.getAdapter().getItemCount());
loadMoreItems(scrollCount);
}
}
});
private boolean isLastItemDisplaying()
{
if (storiesList.getAdapter().getItemCount()!=0) {
int last_visible_count=manager.findFirstCompletelyVisibleItemPosition();
if (last_visible_count!=RecyclerView.NO_POSITION && last_visible_count==storiesList.getAdapter().getItemCount()-1) {
return true;
}
}
return false;
}
在此loadMoreItems方法中调用api。确保在每次api调用时将此滚动计数发送到服务器。在sql查询中,必须执行此操作
例:
例如,第一次您的计数为0;
从帖子中选择*限制0,10
滚动时,您的scrollCount值将增加10(您可以使用您的值Scroll count value将获取接下来的10行)
选择*FROM posts LIMIT 10,10您只需将新数据添加到电影列表的最后一个位置,一切都会正常工作。为此-
创建一个新的列表新列表并将更新的数据添加到其中。现在将新列表添加到列表并通知适配器。如下所示-
List<Model> newList = new ArrayList<>();
// your code..
recyclerView.addOnScrollListener(new EndlessScrollListener(mLayoutManager) {
@Override
public void onLoadMore(int page, int totalItemsCount) {
loadingMore=true;
getRetrofit();
int currentSize = adapter.getItemCount();
list.addAll(newList);
adapter.notifyItemRangeInserted(currentSize, list.size() - 2);
}
});
List newList=newarraylist();
//你的代码。。
recyclerView.addOnScrollListener(新的EndlessScrollListener(mLayoutManager){
@凌驾
public void onLoadMore(整版页面,整版项目目录){
loadingMore=true;
getReformation();
int currentSize=adapter.getItemCount();
list.addAll(newList);
adapter.notifyItemRangeInserted(currentSize,list.size()-2);
}
});
在这里你可以找到类
请看我的其他相关答案以了解更多细节-
希望能有所帮助。以下是使用从各种来源编译的简单库实现无休止滚动RecyclerView的示例
在build.gradle
implementation 'com.hereshem.lib:awesomelib:2.0.1'
使用在活动中创建RecyclerView布局
<com.hereshem.lib.recycler.MyRecyclerView
android:id="@+id/recycler"
app:layoutManager="LinearLayoutManager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
加载数据后,必须调用此函数
recycler.loadComplete();
当不需要LoadMore时,可以通过调用
recycler.hideLoadMore();
可以找到更多的例子
希望这有帮助:)不要使用无限滚动,因为它无法按预期工作。您可以使用此recyclerView.addOnScrollListener(new OnScrollListener(){@Override public void onScrolled(recyclerView recyclerView,int dx,int dy){if(isLastItemDisplaying()){scrollCount=scrollCount+10;L.v(“scroll count”、“”+recyclerView.getAdapter().getItemCount());loadMoreItems(scrollCount);}}}});使用谷歌的支持库
List<Events> items = new ArrayList<>();
MyRecyclerView recycler = findViewById(R.id.recycler);
RecyclerViewAdapter adapter = new RecyclerViewAdapter(this, items, EVHolder.class, R.layout.row_event);
recycler.setAdapter(adapter);
recycler.setOnItemClickListener(new MyRecyclerView.OnItemClickListener() {
@Override
public void onItemClick(int position) {
Toast.makeText(MainActivity.this, "Recycler Item Clicked " + position, Toast.LENGTH_SHORT).show();
}
});
recycler.setOnLoadMoreListener(new MyRecyclerView.OnLoadMoreListener() {
@Override
public void onLoadMore() {
loadData();
}
});
loadData();
recycler.loadComplete();
recycler.hideLoadMore();