2017-03-06 32 views
-2

在適配器類我試圖更新2 TextView點擊事件發生後,ListView控件不正確地更新AFTE使用notifyDataSetChanged()

holder.increase.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       int qty = Integer.parseInt(holder.itemQuantity.getText().toString()); 
       qty += 1; 
       holder.itemQuantity.setText(String.valueOf(qty)); 
       holder.totalItemPrice.setText(String.valueOf(getTotal(position))+" ৳"); 
       updateCartItemQuantity(position,holder.itemQuantity); 

      } 
     }); 

如果我不使用notifyDataSetChanged(),第一TextView變化,但不是第二,而是使用notifyDataSetChanged()後也停止。我在這裏使用BaseAdapter

適配器:

public class CartAdapter extends BaseAdapter { 
    private CartDatabaseSource cartDatabaseSource; 
    private Context context; 
    private ArrayList<CartModel> cartmodels; 
    private ShowCartItemsActivity showCartItemsActivity; 
    public CartAdapter(Context context, ArrayList<CartModel> cartmodels) { 
     cartDatabaseSource = new CartDatabaseSource(context); 
     this.context = context; 
     this.cartmodels = cartmodels; 
     this.showCartItemsActivity = (ShowCartItemsActivity) context; 
    } 
    private static class ViewHolder { 
     TextView itemName; 
     TextView itemPrice; 
     TextView itemQuantity; 
     TextView totalItemPrice; 
     TextView increase; 
     TextView decrease; 
     ImageView foodImage; 
     ImageView delete; 
     ImageView update; 
    } 

    @Override 
    public int getCount() { 
     return cartmodels.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return cartmodels.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @NonNull 
    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 
     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.cart_single_row,parent,false); 
      holder=new ViewHolder(); 
      holder.itemName = (TextView) convertView.findViewById(R.id.cartItemName); 
      holder.itemPrice = (TextView) convertView.findViewById(R.id.cartItemPriceValue); 
      holder.itemQuantity = (TextView) convertView.findViewById(R.id.cartItemQuantityValue); 
      holder.totalItemPrice = (TextView) convertView.findViewById(R.id.cartItemTotalPriceValue); 
      holder.increase = (TextView) convertView.findViewById(R.id.increaseQuantity); 
      holder.decrease = (TextView) convertView.findViewById(R.id.decreaseQuantity); 
      holder.foodImage = (ImageView) convertView.findViewById(R.id.cartFoodImage); 
      holder.delete = (ImageView) convertView.findViewById(R.id.itemDeleteBtn); 
      holder.update = (ImageView) convertView.findViewById(R.id.updateQuantity); 
      convertView.setTag(holder); 
     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     Picasso.with(context).load(cartmodels.get(position).getFoodImage()).into(holder.foodImage); 
     holder.itemName.setText(cartmodels.get(position).getFoodName()); 
     holder.itemPrice.setText(String.valueOf(cartmodels.get(position).getFoodPrice())+" ৳"); 
     holder.itemQuantity.setText(String.valueOf(cartmodels.get(position).getFoodQty())); 
     holder.totalItemPrice.setText(String.valueOf(getTotal(position))+" ৳"); 
     holder.delete.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       int id = cartmodels.get(position).getCartID(); 
       final boolean status = cartDatabaseSource.deleteItem(id); 
       if(status){ 
        context.startActivity(new Intent(context, ShowCartItemsActivity.class)); 
        Toast.makeText(context, "deleted", Toast.LENGTH_SHORT).show(); 
       }else{ 
        Toast.makeText(context, "couldn't delete", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 
     holder.update.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       int id = cartmodels.get(position).getCartID(); 
       int qty = Integer.parseInt(holder.itemQuantity.getText().toString()); 
       final boolean status = cartDatabaseSource.updateCartItem(id,qty); 
       if(status){ 
        context.startActivity(new Intent(context, ShowCartItemsActivity.class)); 
        Toast.makeText(context, "updated", Toast.LENGTH_SHORT).show(); 
        holder.update.setVisibility(View.GONE); 
       }else{ 
        Toast.makeText(context, "couldn't update", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 
     holder.increase.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       int qty = Integer.parseInt(holder.itemQuantity.getText().toString()); 
       qty += 1; 
       holder.totalItemPrice.setText(String.valueOf(getTotal(position))+" ৳"); 
       holder.itemQuantity.setText(String.valueOf(qty)); 
       updateCartItemQuantity(position,holder.itemQuantity); 

      } 
     }); 
     holder.decrease.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       int qty = Integer.parseInt(holder.itemQuantity.getText().toString()); 
       if(qty > 1){ 
        qty -= 1; 
        holder.itemQuantity.setText(String.valueOf(qty)); 
        holder.totalItemPrice.setText(String.valueOf(getTotal(position))+" ৳"); 
        updateCartItemQuantity(position,holder.itemQuantity); 
       } 
      } 
     }); 
     return convertView; 
    } 

    private void updateCartItemQuantity(int position,TextView itemQuantity){ 
     //notifyDataSetChanged(); 
     int id = cartmodels.get(position).getCartID(); 
     int qty = Integer.parseInt(itemQuantity.getText().toString()); 
     final boolean status = cartDatabaseSource.updateCartItem(id,qty); 
     if(status){ 
      if(context instanceof ShowCartItemsActivity){ 
       //((ShowCartItemsActivity)context).setTotalPrice(); 
      } 
     }else{ 
      Toast.makeText(context, "couldn't update", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    private double getTotal(int position) { 
     int qty = cartmodels.get(position).getFoodQty(); 
     double price = cartmodels.get(position).getFoodPrice(); 
     return Math.round(price * qty); 
    } 
} 
+0

holder.itemQuantity'可能不同的參考你點擊''觀點 – Bills

+0

你可以發佈你不應該直接更改數據模型數據'你的適配器代碼?所以我可以給你更好的解決方案。 –

+0

@AsifPatel我添加了我的適配器代碼。 – hasan

回答

0

onClick方法刪除所有代碼,並把這個代碼:

cartmodels.get(position).setFoodQty(cartmodels.get(position).getFoodQty()+1); 
notifyDataSetChanged(); 
+0

感謝您的幫助實施onclicklistener。 – hasan

1

相反的notifyDataSetChanged()你應該使用notifyItemChanged(position)這樣就不需要重新綁定所有的意見。

但是,如果您在onBindViewHolder內設置了OnClickListener,則不需要使用此選項。

+0

我使用listview不recyclerview,我在getview方法 – hasan

相關問題