Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 循环查看滚动并保持在旧位置不要进入顶部_Java_Android_Android Studio_Android Recyclerview - Fatal编程技术网

Java 循环查看滚动并保持在旧位置不要进入顶部

Java 循环查看滚动并保持在旧位置不要进入顶部,java,android,android-studio,android-recyclerview,Java,Android,Android Studio,Android Recyclerview,我的问题是当我在循环视图中滚动我的数据以便加载新数据时,但问题是当新数据从第一个产品开始加载我的循环视图时, 我需要保持旧位置,只滚动新数据,而不是所有新旧数据 目前我正在添加我的文件ADeptor文件和主文件的完整代码 public class adepter extends RecyclerView.Adapter<adepter.viewholder> { private Context mCtx; private List<Product>

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

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



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


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);
        }
    }
}

公共类adepter扩展了RecyclerView.Adapter{
私有上下文mCtx;
私有列表产品列表;
公共adepter(上下文mCtx,列表productList){
this.mCtx=mCtx;
this.productList=productList;
}
@非空
@凌驾
public adepter.viewholder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
LayoutFlater充气机=LayoutFlater.from(mCtx);
视图v=充气机。充气(R.layout.product_list,父项,false);
最终视窗夹持器vh=新视窗夹持器(v);
vh.itemView.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
Product=productList.get(vh.getAdapterPosition());
//这页在这儿打开吗
意向意向=新意向(mCtx,产品信息类);
intent.putExtra(“id”,product.getId());
mCtx.启动触觉(意图);
}
});
返回vh;
}
@凌驾
BindViewHolder上的公共无效(@NonNull adepter.viewholder,int位置){
产品=产品列表。获取(位置);
//加载图像
滑翔带(mCtx)
.load(product.getImage())
.插入(支架.图像视图);
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()));
}
@凌驾
public int getItemCount(){
返回productList.size();
}
公共类viewholder扩展了RecyclerView.viewholder{
TextView textViewTitle、textViewShortDesc、textViewtype、textViewPrice;
图像视图图像视图;
公共视图持有者(@NonNull View 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);
}
}
}

公共类主页扩展应用程序活动{
//存储所有产品的列表
列出产品清单;
//回收视图
回收视图回收视图;
ProgressBar-Pbar;
网格布局经理;
int-token=1;
布尔isScrolling=false;
int currentItems、totalItems、scrollOutItems;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
Pbar=findViewById(R.id.progressBar1);
//从xml获取recyclerview
recyclerView=findViewById(R.id.recylcerView);
recyclerView.setHasFixedSize(true);
manager=新的GridLayoutManager(这是2);
recyclerView.setLayoutManager(管理器);
//初始化产品列表
productList=新的ArrayList();
recyclerView.addOnScrollListener(新的recyclerView.OnScrollListener(){
@凌驾
CrollStateChanged上的公共无效(RecyclerView RecyclerView,int newState){
super.onScrollStateChanged(recyclerView、newState);
if(newState==AbsListView.OnScrollListener.SCROLL\u STATE\u TOUCH\u SCROLL)
{
isScrolling=true;
}
}
@凌驾
已填空的公共空间(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))
{
IsCrolling=假;
令牌++;
getData();
}
}
});
getData();
}
私有void getData(){
字符串url=”https://shop.com/index.php";
url=url+“&pg=“+String.valueOf(令牌);
Pbar.setVisibility(View.VISIBLE);
StringRequest StringRequest=新的StringRequest(Request.Method.GET,url,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
//Toast.makeText(getApplicationContext(),“volly ok”,Toast.LENGTH\u LONG.show();
试一试{
//将字符串转换为json数组对象
JSONArray数组=新的JSONArray(响应);
//遍历所有对象
对于(int i=0;i
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);
    }

}
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);
    }

}