`
qs421qs
  • 浏览: 12194 次
社区版块
存档分类
最新评论

android 为 ListView Item中的组件添加事件 以及更新数据

阅读更多

  // 部分代码如下:
  其中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; private LayoutInflater mInflater; private static TextView textTotalPrice; // private Activity context; public GoodsListAdapter(List 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_ite m_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.calcuteTot alPrice()+""); goods.get(position).setCount(count+""); //更新数据 GoodsListAdapter.this.notifyDataSetChanged(); //View convertView = mInflater.inflate(android.R.layout.simple_list_ite m_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; } }
分享到:
评论

相关推荐

    listview item点赞和收藏

    listview item点赞和收藏,listview item中控件的点击事件,未涉及到网络请求,网络请求请自己在点击事件中添加,代码虽然简单但是思路很重要哦 listview item点击事件

    Android源码:ListView组件应用演示代码

    Android源码:ListView组件应用演示代码,layout的xml文件名需要全部小写。  ActivityList1:   1.初步介绍ListView这个组件。   2.初步介绍ArrayAdapter。   # simple_list_item_single_choice   # ...

    Android项目ListView 中的item随意拖动.rar

    通过简单的API调用,开发者可以轻松地为任何ListView添加可拖动功能,无需处理复杂的触摸事件或编写大量的自定义代码。 此外,该项目还提供了一系列可定制的选项,如拖动动画、手势识别等,以满足不同应用场景的...

    Android代码-实现了在列表控件(ListView, RecyclerView)中加载并播放视频

    VideoListPlayer实现了在列表控件(ListView, RecyclerView)中加载并播放视频,并支持滑动时自动播放/暂停的功能 利用该项目,可以轻松实现类似Instagram的视频播放功能 注意:最低支持API 14以上 效果预览 ...

    Android学习之ListView

    在android应用开发中,ListView是使用频率非常高的一个组件,基本上稍微复杂点的布局都会用到它,利用它可以让你的界面美观,有层次。 一、普通的ListView 普通的ListView是指每一个item只显示一条文本数据 二、...

    androidstudio最新版 实现ListView单选、多选效果最实用案例 亲试可用

    ListView中有一个属性:android:choiceMode,对应三个可选值: * singleChoice 单选 * multipleChoice 多选 ...在ListView的布局中设置了android:choiceMode属性后,item布局需要实现checkable,才有选中效果。

    ListView嵌套ListView的demo

    ListView嵌套ListView的demo实现,第一级ListView的item使用自定义组件。

    ListView项(Item)的三种布局使用例子

    ListView项(Item)的三种布局使用例子

    Android ListView生成可多选的文章列表Item项.rar

    Android ListView生成可多选的文章列表Item项,列表的实现在android中相当实用,很多时候我们都需要对内容进行列表显示,本例中将使用ListView组件显示一个分类下的文章列表,并添加多个可多选的Item项,主要是用...

    Android 自定义横向ListView实现无限级菜单导航类目

    利用github上某位大神写的开源控件 横向ListView,将横向ListView中子项Item中嵌入正常的竖向ListView,在 横向ListView的重载BaseAdapter的getView方法中实现子ListView的OnItemClickListener事件,在该事件中通过...

    Android仿淘宝一个Activity实现多个ListView

    用simpleAdapter实现listview的item,更改item对应的布局就可以仿淘宝实现多个listview上下滑动

    Android App开发中使用RecyclerView替代ListView的实践

    RecyclerView是Android L即5.0版本以来新加入的一个组件,主要用来实现item的瀑布式排列,因而被人们广泛认为用来替代ListView,这里我们就来看一下Android App开发中使用RecyclerView替代ListView的实践:

    Android ListView用法演示实例.rar

    Android ListView用法演示实例,layout的xml文件名需要全部小写,下面来看这几个具体的例子:  ActivityList1:介绍ListView和ArrayAdapter组件。  ActivityList2:介绍cusor和CursorAdapter(有错误,没有调试...

    Android ListView常见的优化方式详解

    对于ListView来说,应该算是布局中几种最常用的组件之一了,使用也十分方便,下面个大家介绍一下两种常见的优化方式. 1.条目复用优化 其实listview的工作原理就是,listview在请求屏幕可见的item数时,convertView在...

    安卓源码包android web应用OCR图像识别listview相关EditText输入框Launcher 桌面45个合集

    [四次元]ListView多级展示,item由对象Leaf提供数据,可设置多个控件.zip [四次元]listview实现图片的异步加载.rar [四次元]listview快速滑动,修改默认的滑动条.rar [四次元]ListView滚动气泡提示.rar [四次元]...

    ListView组件应用演示代码

    Android源码:ListView组件应用演示代码,layout的xml文件名需要全部小写。 ActivityList1: 1.初步介绍ListView这个组件。 2.初步介绍ArrayAdapter。 # simple_list_item_single_choice # simple_list_item_1 ...

    android 音乐播放器

    <item name="android:layout_width">wrap_content</item>//宽度为文本宽度 <item name="android:layout_height">wrap_content</item> //高度为文本高度 </style> <color name="white">#ffffff ...

    ListView 中的item随意拖动.zip

    例如,我们使用了Android Studio作为开发工具,它提供了一系列的功能和工具,如代码编辑器、调试器和模拟器,使得开发人员可以快速开发和测试安卓应用。我们还使用了Java作为主要的编程语言,它是安卓应用开发的主流...

    Android使用ListView实现滚轮的动画效果实例

    那么可以通过先获取ListView的中点,然后获取当前可视的所有item跟ListView的中点的垂直距离计算出一个比例,然后将item的大小根据这个比例进行缩放,各个item跟ListView的中点的垂直距离不同,

Global site tag (gtag.js) - Google Analytics