当前位置: 首页 > 知识库问答 >
问题:

回收器项目视图未正确显示数据

锺威
2023-03-14

当我按下后退按钮时,这个ShoppingActivity会被破坏,当我再次访问该activity时,我发现我的回收器视图项目被替换了两次。我该如何解决这个问题?

ShoppingActivity.java这里编写的所有代码和volley类也在这里调用,当我按下后退键并再次访问该活动时,我发现我的回收器视图项被替换了
@override protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(r.layout.activity_shopping);

    recyclerView = (RecyclerView) findViewById(R.id.rv_recycler_view);
    layoutManager = new LinearLayoutManager(this);

    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(layoutManager);

    btn_sort_name = (Button) findViewById(R.id.btn_name);
    btn_sort_price = (Button) findViewById(R.id.btn_price);

    tv_total_products = (TextView) findViewById(R.id.totalproduct);
    tv_apihits = (TextView) findViewById(R.id.apihits);

    tv_total_products.setText(null);

    if(savedInstanceState==null){
    final JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET,
            BaseUrl,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    int index = 0;
                    arrayList.clear();
                    while (index < response.length()) {
                        try {
                            JSONObject jsonObject = response.getJSONObject(index);
                            arrayList.add(new Items(jsonObject.getString("name"),
                                    jsonObject.getString("description"),
                                    jsonObject.getString("category"),
                                    jsonObject.getDouble("price"),
                                    jsonObject.getInt("quantity"),
                                    jsonObject.getString("shipping"),
                                    jsonObject.getString("location"),
                                    jsonObject.getString("color"),
                                    jsonObject.getString("link")));
                            da = jsonObject.getString("name");
                            Log.d(TAG, da);
                            index++;
                            total_products = index;
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }

                    recyclerViewAdapter = new RecyclerViewAdapter(arrayList, ShoppingActivity.this);
                    recyclerView.setAdapter(recyclerViewAdapter);
                    tv_total_products.append(String.valueOf(total_products));

                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d(TAG, "Error");
                }
            });

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(jsonArrayRequest);
}

    recyclerView.addOnItemTouchListener(new RecyclerViewAdapter.ViewItemClick(getApplicationContext(), recyclerView,
            new RecyclerViewAdapter.ItemClickListener() {
                @Override
                public void clickedItem(View view, int position) {

                    name = arrayList.get(position).getName();
                    description = arrayList.get(position).getDescription();
                    category = arrayList.get(position).getCategory();
                    shipping = arrayList.get(position).getShipping();
                    location = arrayList.get(position).getLocation();
                    color = arrayList.get(position).getColor();
                    link = arrayList.get(position).getLink();
                    price = arrayList.get(position).getPrice();
                    quantity = arrayList.get(position).getQuantity();
                    DataParcel dataParcel = new DataParcel(name, description, category, shipping, location, color, link, price, quantity);

                    Intent intent = new Intent(ShoppingActivity.this, DetailsViewActivity.class);
                    intent.putExtra("data", dataParcel);
                    startActivity(intent);

                }
            }));

}

@Override
public void onBackPressed() {

    super.onBackPressed();
    finish();
}

这是我的DetailsViewActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_details_view);

    btn_back= (Button) findViewById(R.id.btn_back);
    btn_link= (Button) findViewById(R.id.btn_link);
    btn_share= (Button) findViewById(R.id.btn_share);
    btn_sms= (Button) findViewById(R.id.btn_sms);
    tv_description= (TextView) findViewById(R.id.tv_description);

    tv_app_name= (TextView) findViewById(R.id.tv_app_name);

    category= (Button) findViewById(R.id.category);
    price= (Button) findViewById(R.id.price);
    location= (Button) findViewById(R.id.location);
    quantity= (Button) findViewById(R.id.quantity);
    shipping= (Button) findViewById(R.id.shipping);

    iv_star1= (ImageView) findViewById(R.id.star1);
    iv_star2= (ImageView) findViewById(R.id.star2);
    iv_star3= (ImageView) findViewById(R.id.star3);
    iv_star4= (ImageView) findViewById(R.id.star4);
    iv_item_image= (ImageView) findViewById(R.id.item_image);

    Bundle bundle= getIntent().getExtras();
    dataParcel= bundle.getParcelable("data");
    category.setText(dataParcel.getCategory());
    price.setText(String .valueOf(dataParcel.getPrice()));
    quantity.setText("Avilable"+String.valueOf(    dataParcel.getQuantity() ));
    location.setText(dataParcel.getLocation());
    shipping.setText("Shipping: "+dataParcel.getShipping());
    tv_app_name.setText(dataParcel.getName());
    tv_description.setText(dataParcel.getDescription());


}

@Override
protected void onStart() {
    super.onStart();

    btn_back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            finish();
        }
    });
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}

共有1个答案

宗安翔
2023-03-14

问题在于活动的生命周期,您可以在从另一个活动返回时检查第一个活动的实例是否还在。对于快速修复,您可以在使用数据填充arraylist之前清除它,这将在从另一个活动返回时清除先前添加的数据,您可以这样做

arrayList.clear();

之前

 while(index<response.length())

在响应块上。但这只是一个快速的解决方案,而不是实际的解决方案,所以更好的方法是检查类的实例。

 类似资料:
  • 我正面临一个奇怪的错误,其中recyclerview只显示了一个项目。下面是我的recyclerview适配器的代码: 我已经在其他应用程序中使用了这段代码,它的工作非常完美。我已经检查了聊天数据,这也是完美的。 这里是指向git repo布局文件的链接:布局文件

  • 我正试图添加数据在我的回收视图从火炉。我有带名字的文件(级别级别编号)但没有显示我的活动这是代码: 主要活动水平: 公共类级别活动扩展AppCompat活动{ } 水平调整器 公共类级别适配器扩展了RecyclerView。适配器 }

  • 在我的应用程序中,我使用了一个回收器视图,它包含了许多项目,我想在项目之间显示一个点分隔线(分隔符),但它不起作用。我尝试创建一个可绘制的形状,但在添加DividerItemDecurity之后,在回收器视图项之间没有显示空间或线条。我也尝试过创建自定义DividerItemDecoration类,但对我来说都不起作用。注意:目前在我的可绘制形状被设置为矩形,我也尝试了线条。如何实现。任何帮助都将

  • 我正在制作一个应用程序,其中有回收器视图。但我无法在我的应用程序中看到回收器视图。当我检查Logcat时,它显示'e/recyclerview:No adapter attached;正在跳过布局‘。为什么会发生这种情况,我该如何修复? 我的主要活动代码: 我的适配器(PostAdapter.java)类代码:

  • 我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我

  • 如何在swapCursor函数中实现回收器视图默认项添加/删除动画。notifyDataSetChanged()不会显示任何动画。