小编典典

recyclerview滚动并保持在旧位置不要转到顶部

java

我的问题是当我在回收视图中滚动数据时,所以加载了新数据,但问题是当新数据加载时,回收视图从第一个产品开始,

我需要保持旧的位置,只滚动新数据,而不滚动所有旧数据

目前,我正在添加文件adeptoer文件和主文件的完整代码,

public class adepter extends RecyclerView.Adapter<adepter.viewholder> {

    private Context mCtx;
    private List<Product> productList;
        public adepter(Context mCtx, List<Product> productList) {
            this.mCtx = mCtx;
            this.productList = productList;
        }

    @NonNull
    @Override
    public adepter.viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater=LayoutInflater.from(mCtx);
        View v =inflater.inflate(R.layout.product_list, parent, false);
        final viewholder vh = new viewholder(v);
        vh.itemView.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Product product = productList.get(vh.getAdapterPosition());
                //do the page opening here
                Intent intent = new Intent(mCtx, product_info.class);
                intent.putExtra("id",product.getId());

                mCtx.startActivity(intent);

            }
        });
        return vh;

    }

    @Override
    public void onBindViewHolder(@NonNull adepter.viewholder holder, int position) {
        Product product = productList.get(position);
        //loading the image
        Glide.with(mCtx)
                .load(product.getImage())
                .into(holder.imageView);
        holder.textViewTitle.setText(product.getTitle());
        holder.textViewShortDesc.setText(product.getShortdesc());
        holder.textViewtype.setText(String.valueOf(product.getType()));
        holder.textViewPrice.setText("Rs: "+String.valueOf(product.getPrice()));
    }

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





    public class viewholder extends RecyclerView.ViewHolder{
        TextView textViewTitle, textViewShortDesc, textViewtype, textViewPrice;
        ImageView imageView;
        public viewholder(@NonNull View itemView) {
            super(itemView);
            textViewTitle = itemView.findViewById(R.id.textViewTitle);
            textViewShortDesc = itemView.findViewById(R.id.textViewShortDesc);
            textViewtype = itemView.findViewById(R.id.textViewRating);
            textViewPrice = itemView.findViewById(R.id.textViewPrice);
            imageView = itemView.findViewById(R.id.imageView);
        }
    }
}



public class home extends AppCompatActivity {

  //a list to store all the products
    List<Product> productList;
    //the recyclerview
    RecyclerView recyclerView;
    ProgressBar Pbar;
    GridLayoutManager manager;
    int token = 1;
  Boolean isScrolling = false;
    int currentItems, totalItems, scrollOutItems;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        Pbar = findViewById(R.id.progressBar1);
        //getting the recyclerview from xml
        recyclerView = findViewById(R.id.recylcerView);
        recyclerView.setHasFixedSize(true);
         manager = new GridLayoutManager(this, 2);
        recyclerView.setLayoutManager(manager);

        //initializing the productlist
        productList = new ArrayList<>();





        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if(newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL)
                {
                    isScrolling = true;
                }
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                currentItems = manager.getChildCount();
                totalItems = manager.getItemCount();
                scrollOutItems = manager.findFirstVisibleItemPosition();

                if(isScrolling && (currentItems + scrollOutItems == totalItems))
                {
                    isScrolling = false;
                    token++;
                    getData();
                }
            }
        });
        getData();


    }





    private void   getData(){
         String url = "https://shop.com/index.php";

         url = url+ "&pg="+ String.valueOf(token);

        Pbar.setVisibility(View.VISIBLE);

        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        //   Toast.makeText(getApplicationContext(),"volly ok ",Toast.LENGTH_LONG).show();
                        try {
                            //converting the string to json array object
                            JSONArray array = new JSONArray(response);
                            //traversing through all the object
                            for (int i = 0; i < array.length(); i++) {
                                //getting product object from json array
                                JSONObject product = array.getJSONObject(i);
                                //adding the product to product list
                                productList.add(new Product(
                                        product.getInt("id"),
                                        product.getString("title"),
                                        product.getString("shortdesc"),
                                        product.getString("type"),
                                        product.getString("price"),
                                        product.getString("image")
                                ));
                            }
                            //  Toast.makeText(getApplicationContext(),productList+ "volly ok ",Toast.LENGTH_LONG).show();

                          adepter a = new adepter(home.this, productList);
                            recyclerView.setAdapter(a);

                            Pbar.setVisibility(View.GONE);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getApplicationContext(), "Server Error" ,Toast.LENGTH_LONG).show();
                    }
                });

        //adding our stringrequest to queue
        Volley.newRequestQueue(this).add(stringRequest);
    }

}

阅读 321

收藏
2020-12-03

共1个答案

小编典典

试试这个:

public class home extends AppCompatActivity {

  //a list to store all the products
    List<Product> productList;
    //the recyclerview
    RecyclerView recyclerView;
    adepter a;
    ProgressBar Pbar;
    GridLayoutManager manager;
    int token = 1;
  Boolean isScrolling = false;
    int currentItems, totalItems, scrollOutItems;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        Pbar = findViewById(R.id.progressBar1);
        //getting the recyclerview from xml
        recyclerView = findViewById(R.id.recylcerView);
        recyclerView.setHasFixedSize(true);
         manager = new GridLayoutManager(this, 2);
        recyclerView.setLayoutManager(manager);

        //initializing the productlist
        productList = new ArrayList<>();


 a = new adepter(home.this, productList);
                recyclerView.setAdapter(a);


        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if(newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL)
                {
                    isScrolling = true;
                }
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                currentItems = manager.getChildCount();
                totalItems = manager.getItemCount();
                scrollOutItems = manager.findFirstVisibleItemPosition();

                if(isScrolling && (currentItems + scrollOutItems == totalItems))
                {
                    isScrolling = false;
                    token++;
                    getData();
                }
            }
        });
        getData();


    }





    private void   getData(){
         String url = "https://shop.com/index.php";

         url = url+ "&pg="+ String.valueOf(token);

        Pbar.setVisibility(View.VISIBLE);

        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        //   Toast.makeText(getApplicationContext(),"volly ok ",Toast.LENGTH_LONG).show();
                        try {
                            //converting the string to json array object
                            JSONArray array = new JSONArray(response);
                            //traversing through all the object
                            for (int i = 0; i < array.length(); i++) {
                                //getting product object from json array
                                JSONObject product = array.getJSONObject(i);
                                //adding the product to product list
                                productList.add(new Product(
                                        product.getInt("id"),
                                        product.getString("title"),
                                        product.getString("shortdesc"),
                                        product.getString("type"),
                                        product.getString("price"),
                                        product.getString("image")
                                ));
                            }
                            a.notifyDataSetChanged();



                            Pbar.setVisibility(View.GONE);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getApplicationContext(), "Server Error" ,Toast.LENGTH_LONG).show();
                    }
                });

        //adding our stringrequest to queue
        Volley.newRequestQueue(this).add(stringRequest);
    }

}
2020-12-03