2017-04-19 91 views
1

我有一個名爲的自定義陣列適配器CustomListCartItem。我想在購物車項目被移除時更新我的​​活動。到目前爲止,我可以刪除購物車清單中的物品,也可以刪除ArrayAdapter中的物品。但是,我想在我的活動中更新一個名爲txtSubtotal的TextView。從自定義ArrayAdapter更新活動

  1. btnRemove.setOnClickListener是否正確放置?
  2. 如何更改txtSubtotal的值?

我的自定義陣列適配器:

public class CustomListCartItem extends ArrayAdapter<ModelCartItem> { 
    public CustomListCartItem(Activity context, ArrayList<ModelCartItem> cartItems) { 
     super(context, R.layout.single_cart_item, cartItems); 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = LayoutInflater.from(this.getContext()) 
        .inflate(R.layout.single_cart_item, parent, false); 
     } 

     TextView txtItemName = (TextView) convertView.findViewById(R.id.txtItemName); 
     ImageView imgItem = (ImageView) convertView.findViewById(R.id.imgItem); 
     EditText txtQuantity = (EditText) convertView.findViewById(R.id.txtQuantity); 
     Button btnRemove = (Button) convertView.findViewById(R.id.btnRemove); 

     final ModelCartItem cartItem = getItem(position); 
     if (cartItem!= null) { 
      txtItemName.setText(cartItem.modelItem.itemName); 
      Integer imageRes = getContext().getResources().getIdentifier(cartItem.modelItem.imageName, "drawable", getContext().getPackageName()); 
      imgItem.setImageResource(imageRes); 
      txtQuantity.setText(Integer.toString(cartItem.quantity)); 

      btnRemove.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Controller.removeCartItem(cartItem.modelItem); //remove from cart 
        remove(cartItem); //remove from adapter 
       } 
      }); 
     } 
     return convertView; 
    } 
} 

我的活動:在活動

public class CartActivity extends AppCompatActivity { 

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

     TextView txtSubtotal = (TextView)findViewById(R.id.txtSubtotal); 
     txtSubtotal.setText(Controller.getCartSubtotal()); 

     CustomListCartItem adapter = new 
       CustomListCartItem(CartActivity.this, Controller.getCartItems()); 
     ListView list = (ListView) findViewById(R.id.list); 
     list.setAdapter(adapter); 

    } 
} 
+0

你需要你的數據發生變化後通知您的適配器。 –

+0

您可以創建接口並在Activity類中實現它。在適配器類中添加偵聽器。 –

回答

1

我在我的Activity中實現了一個監聽器。

CartActivity:

public class CartActivity extends AppCompatActivity implements CustomListCartItem.ItemListener { 

@Override 
    public void onRemove(ModelCartItem cartItem) { 
     Controller.removeCartItem(cartItem.modelItem); 
     updateSubtotal(); 
    } 

對於CustomListCartItem內getView:

if (itemListener != null) { 
    itemListener.onRemove(cartItem); 
} 

接口:

private ItemListener itemListener; 

public void setItemListener(ItemListener listener) { 
    this.itemListener = listener; 
} 

public interface ItemListener { 
    void onRemove(ModelCartItem cartItem); 
} 
0

Add方法

updateSubTotal(String str) { 
    txtSubtotal.setTExt(str); //str OR whatvever you need to set. 
} 

2.在按鈕的點擊監聽器的方法的onClick(自定義適配器)呼叫updateSubTotal

((CartActivity)context).updateSubTotal("yourvalue"); 
1

添加在您的CartActivity更新TextView的數據的方法。

public class CartActivity extends AppCompatActivity { 

    private TextView txtSubtotal; 

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

     txtSubtotal = (TextView)findViewById(R.id.txtSubtotal); 
     txtSubtotal.setText(Controller.getCartSubtotal()); 

     CustomListCartItem adapter = new 
       CustomListCartItem(CartActivity.this, Controller.getCartItems()); 
     ListView list = (ListView) findViewById(R.id.list); 
     list.setAdapter(adapter); 

    } 

    public void updateData(String data){ 
     txtSubtotal.setText(data); 
    } 
} 

在您的適配器中訪問該方法並在刪除時更改值。

btnRemove.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Controller.removeCartItem(cartItem.modelItem); //remove from cart 
       remove(cartItem); //remove from adapter 
       ((CartActivity)context).updateData("Your updated data") 
      } 
     }); 

希望這可以幫助你。