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();