android ListView的item中Button(购物数量加减器)

1.临时保存每个item中的显示数量控件的text:

HashMap<Integer,Interger> map = new HashMap<Integer,Integer>();

使用map来保存每条item显示的数量值。EditText在BaseAdapter中的getView()

方法中去显示对应position的map中的值,如下:

editText.setText(map.get(position));

2. "-"和"+"添加点击监听去操作map数据。使用接口回调的方法,然后再adapter.notifyDataSetChanged()

---> 调用baseadapter中的getView()方法。

代码如下:

BaseAdapter

@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		if (convertView == null) {
			convertView = inflater.inflate(R.layout.item_food, null);
			holder = new ViewHolder();
			holder.img = (ImageView) convertView
					.findViewById(R.id.product_list_item_img);
			holder.name = (TextView) convertView
					.findViewById(R.id.product_list_item_name);
			holder.price = (TextView) convertView
					.findViewById(R.id.product_list_item_price);
			holder.description_long = (TextView) convertView
					.findViewById(R.id.product_list_item_product_long);
			holder.layout_foodCountSelect = (LinearLayout) convertView
					.findViewById(R.id.layout_food_count_select);
			holder.btn_food_delete = (Button) convertView
					.findViewById(R.id.btn_food_delete);
			holder.btn_food_count = (Button) convertView
					.findViewById(R.id.btn_food_count);
			holder.btn_food_add = (Button) convertView
					.findViewById(R.id.btn_food_add);
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		Product product = datalist.get(position);
		if (product != null) {
			if (!TextUtils.isEmpty(product.getName())) {
				holder.name.setText(product.getName());
			}

			holder.price.setText("¥" + product.getPrice());
			if (!TextUtils.isEmpty(product.getDescription())) {
				holder.description_long
						.setText("介绍" + product.getDescription());
			}
		}
		holder.layout_foodCountSelect
				.setVisibility(mIsBulkPurchase ? View.VISIBLE : View.GONE);
		convertView.setOnClickListener(new ClickListener(product));
		holder.btn_food_count.setText(foodCountMap.get(position) + "");
		holder.btn_food_delete.setOnClickListener(new ClickListener(position));
		holder.btn_food_add.setOnClickListener(new ClickListener(position));
		return convertView;
	}

	class ViewHolder {
		private ImageView img; // 产品图片
		private TextView name; // 名称
		private TextView price; // 价格
		private TextView description_long; // 介绍:长的
		private LinearLayout layout_foodCountSelect;
		private Button btn_food_delete;
		private Button btn_food_count;
		private Button btn_food_add;

	}

	/**
	 * 设置进入批量选购模式
	 */
	public void setBulkPurchase(boolean isShow) {
		mIsBulkPurchase = isShow;
	}

	public boolean getBulkPurchase() {
		return mIsBulkPurchase;
	}

	public void setFoodCountMap(int position, boolean isAdd) {
		int foodCount = foodCountMap.get(position);
		if (foodCount == 0 && !isAdd)
			return;
		foodCountMap.put(position, isAdd ? (foodCount + 1) : (foodCount - 1));
	}

	private class ClickListener implements OnClickListener {

		ViewHolder mViewHolder;
		Product mProduct;
		int mPosition;

		public ClickListener(Product product) {
			this.mProduct = product;
		}

		public ClickListener(int position) {
			this.mPosition = position;
		}

		@Override
		public void onClick(View v) {
			int foodCount = Integer
					.parseInt((String) ((Button) holder.btn_food_count)
							.getText());
			switch (v.getId()) {
			default:
				Intent intent = new Intent();
				intent.setClass(context, FoodDetail_Activity.class);
				context.startActivity(intent);
				break;
			case R.id.btn_food_delete:
				mCallback.dealFoodCount(mPosition, false);
				break;
			case R.id.btn_food_add:
				mCallback.dealFoodCount(mPosition, true);
				break;
			}
		}

	}

	public interface FoodCallback {
		// 处理美食份数选择事件
		void dealFoodCount(int pos, boolean isAdd);
	}

	public void setCallback(FoodCallback callback) {
		this.mCallback = callback;
	}

Fragment:

@Override
	public void dealFoodCount(int position, boolean isAdd) {
		// TODO Auto-generated method stub
		adapter.setFoodCountMap(position,isAdd);
		adapter.notifyDataSetChanged();
		mMainActivity.setSelectedFoodMoney(getSelectedFoodMoney());
	}
时间: 2024-08-09 19:23:13

android ListView的item中Button(购物数量加减器)的相关文章

Android ListView的Item中的按钮Button和ImageButton共存、抢夺焦点问题

一.问题 公司App要求实现和淘宝类似的功能:从淘宝app某个商品详情点击聊天进入聊天界面,会带入商品信息.点击"发送宝贝链接"按钮,发送一条消息(宝贝链接)给卖家.如图: 在开发中遇到的问题就是,点击"发送宝贝链接"按钮,宝贝链接的消息已发送成功,但是不会再页面上显示,已添加到Adapter且notifyDataSetChanged了.但是当你触摸屏幕滑动后,宝贝链接的消息就会出现. 二.分析 在Android开发中,Button.ImageButton.和Edi

安卓Android控件ListView获取item中EditText值

可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数

Android控件ListView获取item中EditText值

可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数

ListView的item中有button和checkbox,listview的点击事件无效

ListView的item中有button和checkbox,listview的点击事件无效,解决办法: 在item布局文件中的根控件中添加属性设置: android:descendantFocusability="blocksDescendants" 如果只能点击checkbox,而无法触发item的点击事件,那么可以禁掉checkbox的焦点获取,不让它可以点击就可以了 checkbox里面加 android:focusable="false" android:

Android ListView的item点击无响应的解决方法

如果listitem里面包括button或者checkbox等控件,默认情况下listitem会失去焦点,导致无法响应item的事件,最常用的解决办法 是在listitem的布局文件中设置descendantFocusability属性. item的布局文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.andro

Android ListView滑动过程中图片显示重复错乱闪烁问题解决

转自:http://www.oschina.net/question/221817_121051 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及ListView的缓存机制.1.原因分析ListView item缓存机制:为了使得性能更优,ListView会缓存行item(某行对应的View).ListView通过adapter的getView函数获得每行的item.滑动过程中, a. 如果某行item已经滑出屏幕,若该item不在缓存内,则p

Android ListView滑动过程中图片显示重复错位闪烁问题解决[转载]

转自:here 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及ListView的缓存机制.1.原因分析ListView item缓存机制:为了使得性能更优,ListView会缓存行item(某行对应的View).ListView通过adapter的getView函数获得每行的item.滑动过程中, a. 如果某行item已经滑出屏幕,若该item不在缓存内,则put进缓存,否则更新缓存:b. 获取滑入屏幕的行item之前会先判断缓存中是否有可

ListView的Item中包含checkbox,Item无法点击的3种解决方案

ListView的Item中包含checkbox,Item无法点击的2种解决方案 1.在checkbox中设置`focusable属性 android:focusable="false" 2.设置Item的布局,焦点不向下传递 android:descendantFocusability="blocksDescendants"

为listview的item中的元素设置onclick事件

表达能力比较差,所以现在解释一下标题的意思:listview的列表项,点击的时候触发的是itemOnClick事件,点击后转向到A页:那么,假如在子项中有一个连接是想转到B页,我们该怎么办呢.这样能明白了吧,好,现在我说一下解决的办法:有两种办法,一种是重写adapter,一种是在你的子项中的元素中设置onclick事件(注意,是在xml中设置onclick元素)我只做了第一种方法,演示如下:我们继承adapter的基类,然后重写getView @SuppressWarnings("unchec