android在购物车每项中添加一个复选框,页面下方添加文本控件用于显示总价。当勾选复选框或取消复选框勾选,应实时计算当前所有勾选项的总价,并显示在文本控件中。
时间: 2024-04-06 20:33:03 浏览: 95
Eclipse编写的Android复选框(仿购物车)应用实例
实现在购物车每项中添加一个复选框,页面下方添加文本控件用于显示总价,可以按照以下步骤进行:
1. 修改购物车列表项布局,在左侧添加一个CheckBox复选框,用于标记该项是否被选中。
2. 在购物车页面中,使用RecyclerView展示购物车列表,设置LayoutManager和Adapter。
3. 在Activity或Fragment中,获取RecyclerView和用于显示总价的TextView控件。
4. 在Adapter中,实现CheckBox的点击事件,当CheckBox被选中或取消选中时,更新当前选中的商品列表和总价数据,并调用RecyclerView的notifyDataSetChanged()方法刷新列表。
5. 在Activity或Fragment中,添加一个方法用于计算当前选中的商品列表的总价,并将结果显示在TextView控件中。
6. 在Activity或Fragment中,调用RecyclerView的addOnScrollListener()方法,监听列表滚动事件,当列表滚动时,隐藏或显示底部的TextView控件。
以下是示例代码:
购物车列表项布局:
```
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:id="@+id/checkbox_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/image_item"
android:layout_width="60dp"
android:layout_height="60dp"/>
<TextView
android:id="@+id/name_item"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<TextView
android:id="@+id/price_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/delete_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除"/>
</LinearLayout>
```
购物车页面代码:
```
public class CartActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private TextView mTotalPrice;
private List<CartItem> mCartItems;
private CartAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);
mRecyclerView = findViewById(R.id.recyclerview_cart);
mTotalPrice = findViewById(R.id.text_total_price);
// 初始化购物车列表和适配器
mCartItems = getCartItems();
mAdapter = new CartAdapter(mCartItems);
mAdapter.setOnCheckedChangeListener(new CartAdapter.OnCheckedChangeListener() {
@Override
public void onCheckedChanged() {
updateTotalPrice();
}
});
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
// 计算总价并显示
updateTotalPrice();
// 监听列表滚动事件,隐藏或显示总价
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
if (dy > 0) {
mTotalPrice.setVisibility(View.GONE);
} else {
mTotalPrice.setVisibility(View.VISIBLE);
}
}
});
}
// 获取购物车列表数据
private List<CartItem> getCartItems() {
// TODO: 从SharedPreferences或SQLite中读取购物车数据
return cartItems;
}
// 更新购物车数据
private void updateCartItems(List<CartItem> cartItems) {
// TODO: 将购物车数据保存到SharedPreferences或SQLite
mAdapter.setCartItems(cartItems);
mAdapter.notifyDataSetChanged();
}
// 计算当前选中的商品列表的总价,并将结果显示在TextView控件中
private void updateTotalPrice() {
List<CartItem> checkedItems = mAdapter.getCheckedItems();
float totalPrice = 0;
for (CartItem item : checkedItems) {
totalPrice += item.getPrice() * item.getQuantity();
}
mTotalPrice.setText(String.format("总价:%.2f元", totalPrice));
}
}
```
购物车适配器代码:
```
public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder> {
private List<CartItem> mCartItems;
private OnCheckedChangeListener mOnCheckedChangeListener;
public CartAdapter(List<CartItem> cartItems) {
mCartItems = cartItems;
}
public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
mOnCheckedChangeListener = listener;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_cart, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
CartItem item = mCartItems.get(position);
holder.mCheckBox.setChecked(item.isChecked());
holder.mName.setText(item.getName());
holder.mPrice.setText(String.format("%.2f元", item.getPrice()));
holder.mQuantity.setText(String.valueOf(item.getQuantity()));
holder.mSubtotal.setText(String.format("%.2f元", item.getPrice() * item.getQuantity()));
holder.mDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCartItems.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, getItemCount() - position);
}
});
holder.mCheckBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
item.setChecked(holder.mCheckBox.isChecked());
if (mOnCheckedChangeListener != null) {
mOnCheckedChangeListener.onCheckedChanged();
}
}
});
}
@Override
public int getItemCount() {
return mCartItems.size();
}
public void setCartItems(List<CartItem> cartItems) {
mCartItems = cartItems;
}
public List<CartItem> getCheckedItems() {
List<CartItem> checkedItems = new ArrayList<>();
for (CartItem item : mCartItems) {
if (item.isChecked()) {
checkedItems.add(item);
}
}
return checkedItems;
}
public interface OnCheckedChangeListener {
void onCheckedChanged();
}
static class ViewHolder extends RecyclerView.ViewHolder {
CheckBox mCheckBox;
ImageView mImage;
TextView mName;
TextView mPrice;
Button mMinus;
TextView mQuantity;
Button mPlus;
TextView mSubtotal;
Button mDelete;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mCheckBox = itemView.findViewById(R.id.checkbox_item);
mImage = itemView.findViewById(R.id.image_item);
mName = itemView.findViewById(R.id.name_item);
mPrice = itemView.findViewById(R.id.price_item);
mMinus = itemView.findViewById(R.id.minus_item);
mQuantity = itemView.findViewById(R.id.quantity_item);
mPlus = itemView.findViewById(R.id.plus_item);
mSubtotal = itemView.findViewById(R.id.subtotal_item);
mDelete = itemView.findViewById(R.id.delete_item);
}
}
}
```
阅读全文