Java 如何滚动以在“回收器”视图上加载更多数据?

Java 如何滚动以在“回收器”视图上加载更多数据?,java,android,Java,Android,我想知道如何滚动以在我的回收器视图中获取更多数据 我的示例使用wordpress api从我的网站发布10篇文章 我想在recycler中每装载5次,然后滚动更多以获得更多的5篇文章 但我不知道如何编码,请比一看,给我一些正确的想法 新闻列表.java /** * A simple {@link Fragment} subclass. */ public class News_List extends Fragment { private static final String URL

我想知道如何滚动以在我的回收器视图中获取更多数据 我的示例使用wordpress api从我的网站发布10篇文章 我想在recycler中每装载5次,然后滚动更多以获得更多的5篇文章 但我不知道如何编码,请比一看,给我一些正确的想法

新闻列表.java

/**
 * A simple {@link Fragment} subclass.
 */
public class News_List extends Fragment {
   private static final String URL = "https://chsknews.com/wp-json/wp/v2/posts/";
   private RecyclerView recyclerView;
   private RecyclerView.Adapter adapter;
   private List<News_Item> news_itemList;
   private SwipeRefreshLayout swipeRefreshLayout;
    public News_List() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.fragment_news__list, container, false);
    swipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipe_refresh);
    recyclerView = (RecyclerView) rootView.findViewById(R.id.MRecyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    news_itemList = new ArrayList<>();
    News_Loader();
    swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            News_Loader();
            Toast.makeText(getContext(),"ដំណើរការជោគជ័យក្នុងការទាញយកពត៏មានចុងក្រោយ",Toast.LENGTH_SHORT).show();
            news_itemList.clear();
        }
    });
    return  rootView;
    }

    private void News_Loader() {
        final ProgressDialog progressDialog = new ProgressDialog(getContext());
        progressDialog.setMessage("Loading News");
        progressDialog.show();

        StringRequest stringRequest = new StringRequest(Request.Method.GET,
                URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        progressDialog.dismiss();
                        try {
                            //JSONObject jsonObject = new JSONObject(response);
                            JSONArray array = new JSONArray(response);
                            for (int i = 0; i < array.length(); i++){
                                JSONObject o = array.getJSONObject(i);
                             //  Log.v("ID",o.getJSONObject("content").optString("rendered"));

                            news_itemList.add(new News_Item(
                                    o.getJSONObject("title").getString("rendered"),
                                    o.getString("date"),
                                    o.getJSONObject("better_featured_image").getString("source_url"),
                                    o.getString("date"),
                                    o.getJSONObject("content").getString("rendered"))
                                );
                               // news_itemList.add(news_item);
                            }
                            adapter = new CustomAdapter(news_itemList,getContext());
                            recyclerView.setAdapter(adapter);
                            if (swipeRefreshLayout.isRefreshing())
                            {
                            swipeRefreshLayout.setRefreshing(false);
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();

                        }

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                progressDialog.dismiss();
                Toast.makeText(getContext(), error.getMessage(),Toast.LENGTH_LONG).show();
                if (swipeRefreshLayout.isRefreshing())
                {
                    swipeRefreshLayout.setRefreshing(false);
                }
            }
        });
        RequestQueue requestQueue = Volley.newRequestQueue(getContext());
        requestQueue.add(stringRequest);
    }

}
/**
*一个简单的{@link Fragment}子类。
*/
公共类新闻列表扩展了片段{
私有静态最终字符串URL=”https://chsknews.com/wp-json/wp/v2/posts/";
私人回收站;
专用循环视图适配器;
私人列表新闻\项目列表;
私人SwipeRefreshLayout SwipeRefreshLayout;
公共新闻列表(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图根视图=充气机。充气(R.layout.fragment\u news\u list,container,false);
swipeRefreshLayout=(swipeRefreshLayout)rootView.findViewById(R.id.swipe\u刷新);
recyclerView=(recyclerView)rootView.findViewById(R.id.MRecyclerView);
recyclerView.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(getContext());
news_itemList=new ArrayList();
新闻加载器();
swipeRefreshLayout.setOnRefreshListener(新的swipeRefreshLayout.OnRefreshListener()){
@凌驾
公共void onRefresh(){
新闻加载器();
Toast.makeText(getContext(),“ដំណើរការជោគជ័យក្នុងការទាញយកពត៏មានចុងក្រោយ",吐司。长度(短)。show();
news_itemList.clear();
}
});
返回rootView;
}
私有void新闻加载程序(){
final ProgressDialog ProgressDialog=新建ProgressDialog(getContext());
progressDialog.setMessage(“加载新闻”);
progressDialog.show();
StringRequest StringRequest=新StringRequest(Request.Method.GET,
网址,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
progressDialog.disclose();
试一试{
//JSONObject JSONObject=新JSONObject(响应);
JSONArray数组=新的JSONArray(响应);
对于(int i=0;i
适配器类

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {

    private List<News_Item> news_items;
    private Context context;

    public CustomAdapter(List<News_Item> news_items, Context context) {
        this.news_items = news_items;
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.card_view,parent,false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
    final News_Item  news_item = news_items.get(position);
    holder.title.setText(Html.fromHtml(news_item.getTitle()));
    holder.news_date.setText((news_item.getNews_date()));
        Picasso.with(context)
                .load(news_item.getImage_url())
                .fit()
                .into(holder.news_img);
    holder.news_img.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context,News_Single_Post.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            intent.putExtra("source_url",news_items.get(position).getImage_url());
            intent.putExtra("rendered", news_items.get(position).getTitle());
            intent.putExtra("date",news_items.get(position).getNews_date());
            intent.putExtra("content",news_items.get(position).getNews_content());
            context.startActivity(intent);
        }
    });
    }

    @Override
    public int getItemCount() {
        return news_items.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{

        public TextView title;
        public TextView news_date;
        public ImageView news_img;
        public ViewHolder(View itemView) {

            super(itemView);
            title = (TextView) itemView.findViewById(R.id.news_title);
            news_date = (TextView) itemView.findViewById(R.id.news_date);
            news_img = (ImageView) itemView.findViewById(R.id.news_image);
        }
    }
}
公共类CustomAdapter扩展了RecyclerView.Adapter{ 私人列表新闻项目; 私人语境; 公共CustomAdapter(列出新闻项、上下文){ this.news\u items=新闻项目; this.context=上下文; } @凌驾 public ViewHolder onCreateViewHolder(视图组父级,int-viewType){ 视图v=LayoutInflater.from(parent.getContext()) .充气(右布局、卡片视图、父视图、假); 返回新的视图持有者(v); } @凌驾 公共无效onBindViewHolder(ViewHolder,最终int位置){ 最终新闻项目新闻项目=新闻项目。获取(位置); holder.title.setText(Html.fromHtml(news\u item.getTitle()); holder.news\u date.setText((news\u item.getNews\u date()); 毕加索。与(上下文) .load(news\u item.getImage\u url()) .fit() .into(holder.news\u img); holder.news\u img.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ 意向意向=新意向(上下文、新闻、单个帖子类); intent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK|intent.FLAG_ACTIVITY_SINGLE_TOP); intent.putExtra(“source\u url”,news\u items.get(position.getImage\u url()); intent.putExtra(“呈现”,news_items.get(position.getTitle()); intent.putExtra(“date”,news_items.get(position.getNews_date()); intent.putExtra(“content”,news_items.get(position.getNews_content()); 背景。开始触觉(意图);
private boolean loading = true;
int pastVisiblesItems, visibleItemCount, totalItemCount;

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() 
{
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) 
{
if(dy > 0) //check for scroll down
{
 visibleItemCount = mLayoutManager.getChildCount();
 totalItemCount = mLayoutManager.getItemCount();
 pastVisiblesItems = mLayoutManager.findFirstVisibleItemPosition();

        if (loading) 
        {
            if ( (visibleItemCount + pastVisiblesItems) >= totalItemCount) 
            {
                loading = false;
                Log.v("...", "Last Item Wow !");
                //Do pagination.. i.e. fetch new data
            }
        }
    }
}
 });
LinearLayoutManager mLayoutManager;
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);