2017-09-03 13 views
0

BackAccessボタンを押すと、このShoppingActivityが破棄され、再びそのアクティビティにアクセスすると、リサイクルビューアイテムが2回交換されたことがわかります。その問題をどうやって解決するのですか?リサイクラーのアイテムビューにデータが正しく表示されない

ShoppingActivity.java 私はリサイクルビュー項目を見つけるすべてここに書かれたコードとボレークラスIが戻って押したときにも、ここで呼び出されると、再びその活動を訪れるが
@Override 保護され、ボイドのonCreate(バンドル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(); 
} 
+0

あなたのコードに 'LayoutManager'を設定できますか? – KeLiuyue

答えて

0

ある問題は、別の活動から戻っながら最初のアクティビティのインスタンスがまだあるかどうかをチェックすることができ、あなたの活動のライフサイクルです。別の活動から戻って、あなたが応答に

while(index<response.length()) 

arrayList.clear(); 

としてそれを行うことができたときに、データとそれを移入する前に、あなたのArrayListをクリアすることができます簡単な解決策として、これは以前に追加されたデータが消去されます ブロック。しかし、これは実際の解決策ではなく、すばやく修正されているので、クラスのインスタンスをチェックする方がよいでしょう。

+0

いいえ動作しません。適切な解決策を教えてください –

関連する問題