android 为 ListView Item中的组件添加事件 以及更新数据
2011-05-12 19:06
447 查看
// 部分代码如下:
其中holder.count 是一个EditView
holder.price 是一个TextView
完整代码如下:
其中holder.count 是一个EditView
holder.price 是一个TextView
@Override public View getView(final int position,View convertView,final ViewGroup parent) { 。。。。。。 // 注意该方法中的Item组件不能使用holder模式,如果用该模式, 所有的组件将共享item中view的事件 导致监听不到指定item中的view的事件,解决办法就是每次创建一个Item中的组件 然后对于每个item 使用不同的监听事件 即 new TextWatcher() 每次都创建一个新的事件监听器 final ViewHolder holder = new ViewHolder(); holder.count.addTextChangedListener( new TextWatcher() { ..... @Override public void afterTextChanged(Editable s) { //holder.price 是与holder.count在同一个item的view holder.price.setText("......."); //赋值起作用 ..... //textTotalPrice是最后一个Item中的view //与holder.price 不是同一个item中的view textTotalPrice.setText("。。。。");//赋值无效 // 更新list goods.get(position).setCount(count+""); //更新数据:条用该方法的以后, 会重新执行getView方法,非局部跟新 GoodsListAdapter.this.notifyDataSetChanged(); });
完整代码如下:
import java.util.List; import org.android.util.NumberUtils; import android.app.Activity; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.TextView; import com.mmb.shop.R; /** * 购物车:商品列表 * * @author wangtao */ public class GoodsListAdapter extends BaseAdapter { private static List<Goods> goods; private LayoutInflater mInflater; private static TextView textTotalPrice; // private Activity context; public GoodsListAdapter(List<Goods> goods_, Activity context) { goods = goods_; mInflater = context.getLayoutInflater(); // this.context = context; } @Override public View getView(final int position,View convertView,final ViewGroup parent) { //最后一条显示总价 if(position == goods.size()){ convertView = mInflater.inflate(android.R.layout.simple_list_item_1, parent, false); textTotalPrice = (TextView) convertView.findViewById(android.R.id.text1); if(goods.size() > 0){ textTotalPrice.setText("总价: "+calcuteTotalPrice()+""); }else{ textTotalPrice.setText("购物车为空...."); } return convertView; } final ViewHolder holder = new ViewHolder(); //商品列表布局 convertView = mInflater.inflate(R.layout.list_item_shop_car, parent, false); holder.id = (TextView) convertView.findViewById(R.id.goods_id); holder.name = (TextView) convertView.findViewById(R.id.goods_name); //不能使用Holder模式; 必须每次都创建一个不同的EditText组件 holder.count = (EditText) convertView.findViewById(R.id.goods_count); //单价 holder.singlePrice = (TextView) convertView.findViewById(R.id.goods_single_price); //总价 holder.price = (TextView) convertView.findViewById(R.id.goods_price); final Goods item = goods.get(position); //holder.id.setText(item.getId()); holder.name.setText(item.getName()); holder.count.setText(item.getCount()); holder.singlePrice.setText(item.getSinglePrice()); float totalPrice = Integer.valueOf(item.getCount()) * Float.valueOf(item.getSinglePrice()); holder.price.setText("价格: " + totalPrice + ""); //设置没类产品的总价 goods.get(position).setTotalPrice(totalPrice + ""); //添加编辑框的change事件 holder.count.addTextChangedListener( new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { try{//s.toString() 即是 文本框的值 int count = Integer.valueOf(s.toString()); float singlePrice = Integer.valueOf(item.getSinglePrice()); float totalPrice = count * singlePrice; holder.price.setText(totalPrice + ""); goods.get(position).setTotalPrice(totalPrice + ""); textTotalPrice.setText(GoodsListAdapter.calcuteTotalPrice()+""); goods.get(position).setCount(count+""); //更新数据 GoodsListAdapter.this.notifyDataSetChanged(); //View convertView = mInflater.inflate(android.R.layout.simple_list_item_1, parent, false); //updateItemInTotalPrice(); }catch(Exception e){ Log.e("xx", e.getStackTrace().toString()); } } }); return convertView; } // ViewHolder模式???? static class ViewHolder { TextView id; // ID TextView name; // 名称 EditText count; // 数量 TextView singlePrice;//单价 TextView price; // 单个商品的总价 } /** * 计算所有购物车商品总价 * @return */ private final static float calcuteTotalPrice(){ float price = 0f; for(Goods gs : goods){ price += NumberUtils.toFloat(gs.getTotalPrice()); } return price; } //更新购物车商品总价Item ~~ 非全部整合ListView // private final void updateItemInTotalPrice(){ // TextView view = (TextView) this.getItem(goods.size()); // view.setText("ddddddddd"); // } @Override public int getCount() { return goods.size() + 1; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } }
相关文章推荐
- android 为 ListView Item中的组件添加事件 以及更新数据
- android为ListView每个Item上面的按钮添加事件
- 利用RecycleView实现类似ListView的Item点击,长按等操作事件以及点击后每一项在添加一个列表
- android 中listview添加数据,以及listview优化
- android listview里包含组件(checkbox)点击事件和Item的点击事件冲突
- 打造Android集合控件数据绑定(支持添加监听,支持AbsListView与RecycleView,支持异步加载等)(二)ORM注解以及解析
- ListView每个Item上面的组件添加事件
- android listview item中的按钮点击事件如何添加,请教大神
- Android ListView下拉加载更多,http请求加载数据,Item点击事件
- android中通过网络请求数据显示在Listview中,面对许多的item,如何给每个item设置点击事件以跳转到不同的activity
- 【Android笔记-异常-4】定义一个临时的数组变量承接数据,ListView的数据以及通知数据更新要放到同一个线程(主线程)。避免出现异常"The content of the adapter
- Android——Listview不用notifydatasetchanged更新数据的方法
- 分别使用simpleAdapter和baseAdapter为ListView的Item添加按钮响应事件
- Android中给Spinner或ListView添加数据
- Android列表组件ListView使用详解之滑动事件监听
- Android开发中自定义ListView中存在ImageButton不响应ListItemClick单击事件详细d飞解决办法
- 【Android】23、listviewitem点击事件
- [Android]在ListView嵌套GridView中出现的点击事件处理以及gridview显示不全的有关问题
- Android中Listview的getChildAt()只能更新当前显示在屏幕上的Item的解决办法
- android 往dialog中加入listview,并实现listview中item的点击事件