Android 如何使用recycler视图实现无休止的滚动
我想显示由页面分隔的数据列表,首先我想显示5个详细信息,然后当用户向下滚动时,它会再次调用api加载5个详细信息。现在我已经能够显示前5个详细信息,但当滚动时,它会用新的5个详细信息替换以前的5个详细信息,而不是添加数据 要在其中显示数据的主文件Android 如何使用recycler视图实现无休止的滚动,android,Android,我想显示由页面分隔的数据列表,首先我想显示5个详细信息,然后当用户向下滚动时,它会再次调用api加载5个详细信息。现在我已经能够显示前5个详细信息,但当滚动时,它会用新的5个详细信息替换以前的5个详细信息,而不是添加数据 要在其中显示数据的主文件 package com.example.vinod.lcoportal; import android.app.ProgressDialog; import android.content.Intent; import android.os.Asy
package com.example.vinod.lcoportal;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
/**
* A simple {@link Fragment} subclass.
*/
public class StbDetailsFragment extends Fragment {
RecyclerView recycler_view_stb_details;
ArrayList<StbDetails> listitems_stb = new ArrayList<>();
String[] name = new String[50];
String[] address = new String[100];
String[] vc_stb = new String[100];
String[] city = new String[100];
String[] current_plan = new String[200];
String[] status = new String[50];
String[] csi = new String[300];
int currentpage = 0;
int pagesize = 5;
ProgressDialog pDialog;
JSONArray ja;
JSONObject jo;
String custcsi, custcity, custname, currentplan, custstatus, vc_no;
String stb_url = "http://lco.denonline.in/wapp/Service1.svc/Dashboard";
public StbDetailsFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_stb_details, container, false);
currentpage = currentpage + 1;
GetStb getStb= new GetStb(currentpage, pagesize);
getStb.execute(stb_url);
return view;
}
public class MyAdapterStb extends RecyclerView.Adapter<MyAdapterStb.MyViewHolderStb> {
private ArrayList<StbDetails> list;
public MyAdapterStb(ArrayList<StbDetails> Data) {
list = Data;
}
@Override
public MyViewHolderStb onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.stb_details_cardview, parent, false);
MyViewHolderStb holder = new MyViewHolderStb(view);
return holder;
}
@Override
public void onBindViewHolder(final MyViewHolderStb holder, int position) {
holder.cust_name.setText(list.get(position).getName());
holder.cust_address.setText(list.get(position).getAddress());
holder.cust_vc.setText(list.get(position).getVc_stb_no());
holder.cust_city.setText(list.get(position).getCity());
holder.cust_plan.setText(list.get(position).getCurrentPlan());
holder.cust_status.setText(list.get(position).getStatus());
// holder.events_imageview.setImageResource(list.get(position).getImageResourceId());
// holder.events_imageview.setTag(list.get(position).getImageResourceId());
// Glide.with(getActivity()).load(list.get(position).getImageResourceId_notices()).into(holder.notices_imageview);
}
@Override
public int getItemCount() {
return list.size();
}
public class MyViewHolderStb extends RecyclerView.ViewHolder {
TextView cust_name, cust_address, cust_vc, cust_city, cust_plan, cust_status ;
public MyViewHolderStb(View v) {
super(v);
cust_name = (TextView) v.findViewById(R.id.name_stb_details);
cust_address = (TextView) v.findViewById(R.id.address_stb_details);
cust_vc = (TextView) v.findViewById(R.id.vc_stb_no_stb_details);
cust_city = (TextView) v.findViewById(R.id.city_stb_details);
cust_plan = (TextView) v.findViewById(R.id.current_plan_stb_details);
cust_status = (TextView) v.findViewById(R.id.status_stb_details);
// v.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// Intent i = new Intent(getActivity(),NoticesViewActivity.class);
// i.putExtra("notice_url",pdf[getAdapterPosition()]);
// i.putExtra("notice_title",title_notices[getAdapterPosition()]);
// startActivity(i);
// }
// });
}
}
}
public void initializeList() {
listitems_stb.clear();
for (int i = 0; i < ja.length(); i++) {
StbDetails item = new StbDetails();
item.setName(name[i]);
item.setAddress(address[i]);
item.setVc_stb_no(vc_stb[i]);
item.setCity(city[i]);
item.setCurrentPlan(current_plan[i]);
item.setStatus(status[i]);
listitems_stb.add(item);
}
}
public class GetStb extends AsyncTask<String,String,String> {
HttpURLConnection httpURLConnection;
int CurrentPage, PageSize;
public GetStb(int currentpage, int pagesize) {
CurrentPage = currentpage;
PageSize = pagesize;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("Fetching Data...Please Wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
//pDialog.show();
// progress_dialog.setVisibility(View.VISIBLE);
}
@Override
protected String doInBackground(String... params) {
try {
URL url = new URL(params[0]);
Log.d("DoInBackground:URL", url.toString());
//Send Post Data request
httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("GET");
httpURLConnection.addRequestProperty("api_key", "XBoGycClZkJrXDVphgpN5c9Bb82fcKQ4");
httpURLConnection.addRequestProperty("gulco", "fe96632f-5173-e611-942d-005056bb1e58");
httpURLConnection.addRequestProperty("currentpage", String.valueOf(CurrentPage));
httpURLConnection.addRequestProperty("pagesize", String.valueOf(PageSize));
//)httpURLConnection.setDoOutput(true);
httpURLConnection.setUseCaches(false);
httpURLConnection.setDoInput(true);
httpURLConnection.connect();
//Get the Server Response
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"));
String response = "";
String line = "";
while ((line = bufferedReader.readLine()) != null) {
response += line;
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
Log.d("DoInBackground", "Response:" + response);
return response;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String response) {
GridLayoutManager MyLayoutManager = new GridLayoutManager(getActivity(),1);
MyLayoutManager.setOrientation(GridLayoutManager.VERTICAL);
recycler_view_stb_details = (RecyclerView) getActivity().findViewById(R.id.recycler_view_stb_details);
recycler_view_stb_details.setHasFixedSize(true);
try {
ja = new JSONArray(response);
//ja = jo.getJSONArray("notices");
//images = new String[ja.length()];
//title = new String[ja.length()];
for (int i=0;i<ja.length();i++) {
JSONObject json = ja.getJSONObject(i);
custcsi = json.getString("CSI");
custcity = json.getString("City");
custname = json.getString("CustName");
currentplan = json.getString("Plan");
custstatus = json.getString("Status");
vc_no = json.getString("VCNO");
name[i] = custname;
csi[i] = custcsi;
city[i] = custcity;
current_plan[i] = currentplan;
vc_stb[i] = vc_no;
status[i] = custstatus;
initializeList();
}
} catch (Exception e) {
e.printStackTrace();
}
//progress_dialog.setVisibility(View.GONE);
//pDialog.dismiss();
if (listitems_stb.size() > 0 & recycler_view_stb_details != null) {
recycler_view_stb_details.setAdapter(new MyAdapterStb(listitems_stb));
}
recycler_view_stb_details.setLayoutManager(MyLayoutManager);
//pDialog.dismiss();
}
}
}
package com.example.vinod.lcoportal;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.support.v4.app.Fragment;
导入android.support.v7.widget.GridLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageView;
导入android.widget.TextView;
导入com.bumptech.glide.glide;
导入org.json.JSONArray;
导入org.json.JSONObject;
导入java.io.BufferedReader;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.util.ArrayList;
/**
*一个简单的{@link Fragment}子类。
*/
公共类StbDetailsFragment扩展了片段{
RecyclerView recycler\u view\u stb\u详细信息;
ArrayList listitems_stb=新建ArrayList();
字符串[]名称=新字符串[50];
字符串[]地址=新字符串[100];
字符串[]vc_stb=新字符串[100];
字符串[]城市=新字符串[100];
字符串[]当前_计划=新字符串[200];
字符串[]状态=新字符串[50];
字符串[]csi=新字符串[300];
int currentpage=0;
int pagesize=5;
ProgressDialog;
杰索纳雷;
JSONObject jo;
字符串custcsi、custcity、custname、currentplan、custstatus、vc\u no;
字符串stb_url=”http://lco.denonline.in/wapp/Service1.svc/Dashboard";
公共StbDetailsFragment(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u stb\u详细信息,容器,错误);
currentpage=currentpage+1;
GetStb GetStb=新的GetStb(当前页面,页面大小);
getStb.execute(stb_url);
返回视图;
}
公共类MyAdapterStb扩展了RecyclerView.Adapter{
私有数组列表;
公共MyAdapterStb(阵列列表数据){
列表=数据;
}
@凌驾
公共MyViewHolderStb onCreateViewHolder(视图组父级,int-viewType){
//创建新视图
View=LayoutInflater.from(parent.getContext())
.充气(R.layout.stb_details_cardwiew,parent,false);
MyViewHolderStb holder=新的MyViewHolderStb(视图);
报税表持有人;
}
@凌驾
BindViewHolder上的公共无效(最终MyViewHolderStb持有人,内部位置){
holder.cust_name.setText(list.get(position.getName());
holder.cust_address.setText(list.get(position.getAddress());
holder.cust_vc.setText(list.get(position.getVc_stb_no());
holder.cust_city.setText(list.get(position.getCity());
holder.cust_plan.setText(list.get(position.getCurrentPlan());
holder.cust_status.setText(list.get(position.getStatus());
//holder.events_imageview.setImageResource(list.get(position.getImageResourceId());
//holder.events_imageview.setTag(list.get(position.getImageResourceId());
//Glide.with(getActivity()).load(list.get(position.getImageResourceId_notices()).into(holder.notices_imageview);
}
@凌驾
public int getItemCount(){
返回list.size();
}
公共类MyViewHolderStb扩展了RecyclerView.ViewHolder{
text查看客户名称、客户地址、客户vc、客户城市、客户计划、客户状态;
公共MyViewHolderStb(视图五){
超级(五);
客户名称=(文本视图)v.findviewbyd(R.id.name\u stb\u详细信息);
客户地址=(文本视图)v.findviewbyd(R.id.address\u stb\u详细信息);
cust_vc=(TextView)v.findviewbyd(R.id.vc\u stb\u no\u stb\u详细信息);
客户城市=(文本视图)v.findViewById(R.id.city\u stb\u详细信息);
客户计划=(文本视图)v.findviewbyd(R.id.current\u plan\u stb\u details);
客户状态=(文本视图)v.findviewbyd(R.id.status\u stb\u详细信息);
//v.setOnClickListener(新视图.OnClickListener(){
//@覆盖
//公共void onClick(视图v){
//意图i=新意图(getActivity(),noticeViewActivity.class);
//i.putExtra(“注意url”,pdf[getAdapterPosition());
//i.putExtra(“通知标题”,标题标题通知[getAdapterPosition()]);
//星触觉(i);
// }
// });
}
}
}
公共无效初始值列表(){
listitems_stb.clear();
对于(int i=0;i