热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

部分代码如下:其中holder.count是一个EditViewholder.price是一个TextView复制到剪贴板Java代码viewplaincopytoclipboar

// 部分代码如下:

其中holder.count 是一个EditView

holder.price 是一个TextView

Java代码
  1. view plaincopy to clipboardprint?    
  2. @Override      
  3.     public View getView(final int position,View convertView,final ViewGroup parent) {      
  4. 。。。。。。      
  5. // 注意该方法中的Item组件不能使用holder模式,如果用该模式, 所有的组件将共享item中view的事件      
  6. 导致监听不到指定item中的view的事件,解决办法就是每次创建一个Item中的组件      
  7.       
  8. 然后对于每个item 使用不同的监听事件 即 new TextWatcher() 每次都创建一个新的事件监听器      
  9.       
  10. final ViewHolder holder = new ViewHolder();      
  11.       
  12. holder.count.addTextChangedListener( new TextWatcher() {      
  13.             .....      
  14.     @Override      
  15.     public void afterTextChanged(Editable s) {      
  16.     //holder.price 是与holder.count在同一个item的view                    
  17. holder.price.setText("......."); //赋值起作用      
  18.          .....      
  19.         //textTotalPrice是最后一个Item中的view      
  20.         //与holder.price 不是同一个item中的view      
  21.     textTotalPrice.setText("。。。。");//赋值无效      
  22.          // 更新list      
  23.     goods.get(position).setCount(count+"");      
  24.     //更新数据:条用该方法的以后, 会重新执行getView方法,非局部跟新      
  25.     GoodsListAdapter.this.notifyDataSetChanged();      
  26. });      

完整代码如下:   复制到剪贴板  

Java代码
  1.  
  2. view plaincopy to clipboardprint?  
  3. import java.util.List;    
  4.     
  5. import org.android.util.NumberUtils;    
  6.     
  7. import android.app.Activity;    
  8. import android.text.Editable;    
  9. import android.text.TextWatcher;    
  10. import android.util.Log;    
  11. import android.view.LayoutInflater;    
  12. import android.view.View;    
  13. import android.view.ViewGroup;    
  14. import android.widget.BaseAdapter;    
  15. import android.widget.EditText;    
  16. import android.widget.TextView;    
  17.     
  18. import com.mmb.shop.R;    
  19. /**  
  20.  * 购物车:商品列表  
  21.  *   
  22.  * @author wangtao  
  23.  */    
  24. public class GoodsListAdapter extends BaseAdapter {    
  25.         
  26.     private static List goods;    
  27.     
  28.     private LayoutInflater mInflater;    
  29.         
  30.     private static TextView textTotalPrice;    
  31.         
  32. //  private Activity context;    
  33.         
  34.     public GoodsListAdapter(List goods_, Activity context) {    
  35.         goods = goods_;    
  36.         mInflater = context.getLayoutInflater();    
  37. //      this.context = context;    
  38.     }    
  39.     
  40.     @Override    
  41.     public View getView(final int position,View convertView,final ViewGroup parent) {    
  42.         //最后一条显示总价    
  43.         if(position == goods.size()){    
  44.             convertView = mInflater.inflate(android.R.layout.simple_list_item_1, parent, false);    
  45.             textTotalPrice = (TextView) convertView.findViewById(android.R.id.text1);    
  46.             if(goods.size() > 0){    
  47.                 textTotalPrice.setText("总价: "+calcuteTotalPrice()+"");    
  48.             }else{    
  49.                 textTotalPrice.setText("购物车为空....");    
  50.             }    
  51.             return convertView;    
  52.         }    
  53.             
  54.         final ViewHolder holder = new ViewHolder();    
  55.         //商品列表布局    
  56.         convertView = mInflater.inflate(R.layout.list_item_shop_car, parent, false);    
  57.         holder.id = (TextView) convertView.findViewById(R.id.goods_id);    
  58.         holder.name = (TextView) convertView.findViewById(R.id.goods_name);    
  59.         //不能使用Holder模式; 必须每次都创建一个不同的EditText组件    
  60.         holder.count = (EditText) convertView.findViewById(R.id.goods_count);    
  61.         //单价    
  62.         holder.singlePrice = (TextView) convertView.findViewById(R.id.goods_single_price);    
  63.         //总价    
  64.         holder.price = (TextView) convertView.findViewById(R.id.goods_price);    
  65.             
  66.         final Goods item = goods.get(position);    
  67.         //holder.id.setText(item.getId());    
  68.         holder.name.setText(item.getName());    
  69.         holder.count.setText(item.getCount());    
  70.         holder.singlePrice.setText(item.getSinglePrice());    
  71.         float totalPrice = Integer.valueOf(item.getCount()) * Float.valueOf(item.getSinglePrice());    
  72.         holder.price.setText("价格: " + totalPrice + "");    
  73.         //设置没类产品的总价    
  74.         goods.get(position).setTotalPrice(totalPrice + "");    
  75.             
  76.         //添加编辑框的change事件    
  77.         holder.count.addTextChangedListener( new TextWatcher() {    
  78.             @Override    
  79.             public void onTextChanged(CharSequence s, int start, int before, int count) {    
  80.             }    
  81.             @Override    
  82.             public void beforeTextChanged(CharSequence s, int start, int count,    
  83.                     int after) {    
  84.             }    
  85.             @Override    
  86.             public void afterTextChanged(Editable s) {    
  87.                 try{//s.toString() 即是 文本框的值    
  88.                     int count = Integer.valueOf(s.toString());    
  89.                     float singlePrice = Integer.valueOf(item.getSinglePrice());    
  90.                     float totalPrice = count * singlePrice;    
  91.                     holder.price.setText(totalPrice + "");    
  92.                     goods.get(position).setTotalPrice(totalPrice + "");    
  93.                     textTotalPrice.setText(GoodsListAdapter.calcuteTotalPrice()+"");    
  94.                     goods.get(position).setCount(count+"");    
  95.                     //更新数据    
  96.                     GoodsListAdapter.this.notifyDataSetChanged();    
  97.                     //View convertView = mInflater.inflate(android.R.layout.simple_list_item_1, parent, false);    
  98.                     //updateItemInTotalPrice();    
  99.                 }catch(Exception e){    
  100.                     Log.e("xx", e.getStackTrace().toString());    
  101.                 }    
  102.                     
  103.             }    
  104.         });    
  105.         return convertView;    
  106.     }    
  107.     // ViewHolder模式????    
  108.     static class ViewHolder {    
  109.         TextView id;    // ID    
  110.         TextView name;  // 名称    
  111.         EditText count; // 数量    
  112.         TextView singlePrice;//单价    
  113.         TextView price; // 单个商品的总价    
  114.             
  115.     }    
  116.         
  117.     /**  
  118.      * 计算所有购物车商品总价  
  119.      * @return  
  120.      */    
  121.     private final static float calcuteTotalPrice(){    
  122.         float price = 0f;    
  123.         for(Goods gs : goods){    
  124.             price += NumberUtils.toFloat(gs.getTotalPrice());    
  125.         }    
  126.         return price;    
  127.     }    
  128.     //更新购物车商品总价Item ~~ 非全部整合ListView    
  129. //  private final void updateItemInTotalPrice(){    
  130. //      TextView view = (TextView) this.getItem(goods.size());    
  131. //      view.setText("ddddddddd");    
  132. //  }    
  133.         
  134.     @Override    
  135.     public int getCount() {    
  136.         return goods.size() + 1;    
  137.     }    
  138.     @Override    
  139.     public Object getItem(int position) {    
  140.         return position;    
  141.     }    
  142.     @Override    
  143.     public long getItemId(int position) {    
  144.         return position;    
  145.     }    
  146.     

推荐阅读
  • java线程实现图片滚动_Android线程实现图片轮播
    一、实现效果本篇文章实现了简单的图片轮播,初始化3张资源图片,初始化3秒更换一次图片背景,轮换播放。二、知识点Thread线程start( ... [详细]
  • android图片浏览器(二)——实现显示图片的标题
    上一篇文章http:blog.csdn.netbadboy1110articledetails6879236只是单纯的显示一个图片,虽然我改进了,但是在 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • Stringtitle=titleText.getText().toString();Stringtimelength=lengthText.getText().toSt ... [详细]
  • 我正在尝试创建一个在单击按钮时出现的表单。这是输出: ... [详细]
  • 开发笔记:深入解析libgdx游戏框架中的开源Java系统控件Button类的专题15
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了开源java游戏框架libgdx专题-15-系统控件-Button类相关的知识,希望对你有一定的参考价值。B ... [详细]
  • Android基础入门教程——2.4.12ExpandableListView(可折叠列表)的基本使用标签(空格分隔):Android基础入门教程本节引言:本节要讲解的Adap ... [详细]
author-avatar
super---小杰_360
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有