Я получаю данные с локального сервера в моем recyclerView, используя стиль подкачки, то есть извлекаю следующую страницу после того, как она завершила элементы первой страницы. Я зашел так далеко, но столкнулся с проблемой автоматической прокрутки вверх, пока она доходила до следующей страницы и так далее. Вот код фрагмента
public class AVehicleFragment extends Fragment {
Button btnsearch;
RequestQueue requestQueue;
StringRequest stringRequest;
List<Vehicleinfo> vehicleinfos;
RecyclerView recyclerView;
VehiclelistAdapter vehiclelistAdapter;
LinearLayoutManager layoutManager;
int PAGE_SIZE = 20;
int PAGE_NUMBE= 1;
int currentitem,totalitem,scrolleditem;
//RecyclerView.LayoutManager layoutManager;
boolean isScrolling = false;
ProgressBar progressBar;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_avehicle, container, false);
btnsearch = view.findViewById(R.id.btnsearch);
progressBar = view.findViewById(R.id.progressbar);
vehicleinfos = new ArrayList<>();
recyclerView = view.findViewById(R.id.rvvehilelist);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
isScrolling = true;
recyclerView.scrollToPosition(scrolleditem);
Log.d(TAG, "onScrollStateChanged: ");
}
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
currentitem = layoutManager.getChildCount();
scrolleditem = layoutManager.findFirstVisibleItemPosition();
totalitem = layoutManager.getItemCount();
if (isScrolling &&(currentitem + scrolleditem==totalitem)){
isScrolling=false;
fetchData();
// recyclerView.scrollToPosition(scrolleditem);
Log.d(TAG, "onScrollStateChanged: ");
}
}
});
layoutManager = new LinearLayoutManager(getContext());
readInitialvehicle(PAGE_SIZE,PAGE_NUMBE);
recyclerView.scrollToPosition(scrolleditem);
return view;
}
public void readInitialvehicle(int pagesize, int pagenum){
requestQueue = Volley.newRequestQueue(getContext());
String url = MConstant.URL+MConstant.VEHICLEPAGESIZE+pagesize+MConstant.VEHICLEPAGENUMBER+pagenum;
stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONArray jsonArray = new JSONArray(response);
for (int i =0;i<jsonArray.length();i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
String vehiclenum = jsonObject.getString("VehicleNumber");
String owner = jsonObject.getString("Owner");
String driver = jsonObject.getString("Driver");
String vehicletype = jsonObject.getString("VehicleType");
String registrationfee = jsonObject.getString("RegistrationFee");
String vehicleengine = jsonObject.getString("EngineType");
String balance = jsonObject.getString("LatestBalance");
String vehicleid = jsonObject.getString("VehicleId");
Vehicleinfo vehicleinfo = new Vehicleinfo(owner,driver,vehiclenum,vehicletype,registrationfee,vehicleengine,balance,vehicleid);
vehicleinfos.add(vehicleinfo);
}
vehiclelistAdapter = new VehiclelistAdapter(vehicleinfos);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(vehiclelistAdapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, "onErrorResponse: ");
}
});
requestQueue.add(stringRequest);
}
public void fetchData(){
progressBar.setVisibility(View.VISIBLE);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
PAGE_SIZE= PAGE_SIZE+20;
PAGE_NUMBE=PAGE_NUMBE+1;
readInitialvehicle(PAGE_SIZE,PAGE_NUMBE);
progressBar.setVisibility(View.GONE);
}
},3000);
}
}
Вот класс адаптера Recyclerview
public class VehiclelistAdapter extends RecyclerView.Adapter<VehiclelistAdapter.ViewHolder> {
List<Vehicleinfo> vehicleinfos;
public VehiclelistAdapter(List<Vehicleinfo> vehicleinfos) {
this.vehicleinfos = vehicleinfos;
}
@NonNull
@Override
public VehiclelistAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rv_vehiclelist_fragment,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull VehiclelistAdapter.ViewHolder holder, final int position) {
final Vehicleinfo vehicleinfo = vehicleinfos.get(position);
String vehiclenum = vehicleinfo.getVehiclenum();
String owner = vehicleinfo.getOwner();
String driver = vehicleinfo.getDriver();
String sn = String.valueOf(position+1);
holder.tvvehiclenum.setText(vehiclenum);
holder.tvowner.setText(owner);
holder.tvdriver.setText(driver);
holder.tvsn.setText(sn);
if (position%2 ==1){
holder.itemView.setBackgroundColor(Color.parseColor("#D3B3E2"));
}
else {
holder.itemView.setBackgroundColor(Color.parseColor("#FFFFFF"));
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = new Bundle();
String vehicletype = vehicleinfo.getVehicletype();
String registrationfee = vehicleinfo.getRegistrationfee();
String enginetype = vehicleinfo.getVehicleengine();
String balance = vehicleinfo.getBalance();
String vehiclenumber = vehicleinfo.getVehiclenum();
String vehicleid = vehicleinfo.getVehicleid();
bundle.putString("vehicletype",vehicletype);
bundle.putString("registrationfee",registrationfee);
bundle.putString("enginetype",enginetype);
bundle.putString("balance",balance);
bundle.putString("vehiclenumber",vehiclenumber);
bundle.putString("vehicleid",vehicleid);
AVehicledetailFragment vehicledetailFragment = new AVehicledetailFragment();
vehicledetailFragment.setArguments(bundle);
AppCompatActivity appCompatActivity = (AppCompatActivity) v.getContext();
appCompatActivity.getSupportFragmentManager().beginTransaction().replace(R.id.fcontainer,vehicledetailFragment).addToBackStack(null).commit();
}
});
}
@Override
public int getItemCount() {
return vehicleinfos.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView tvsn,tvvehiclenum,tvowner,tvdriver;
public ViewHolder(@NonNull View itemView) {
super(itemView);
tvsn = itemView.findViewById(R.id.tvsn);
tvdriver = itemView.findViewById(R.id.tvdrivername);
tvowner = itemView.findViewById(R.id.tvownername);
tvvehiclenum = itemView.findViewById(R.id.tvvehiclenum);
}
}
}
Первоначально он выбирает данные первой страницы и после прокрутки он извлекает данные второй страницы и отображает их заполнитель, но recyclerView автоматически прокручивается вверх. Я go с другим ответом здесь также не помог мне. Пожалуйста, не голосуйте против этого вопроса .