Java 如何滚动以在“回收器”视图上加载更多数据?
我想知道如何滚动以在我的回收器视图中获取更多数据 我的示例使用wordpress api从我的网站发布10篇文章 我想在recycler中每装载5次,然后滚动更多以获得更多的5篇文章 但我不知道如何编码,请比一看,给我一些正确的想法 新闻列表.javaJava 如何滚动以在“回收器”视图上加载更多数据?,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
/**
* 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);