android 为 ListView Item中的组件添加事件 以及更新数据
// 部分代码如下:
其中holder.count 是一个EditView
holder.price 是一个TextView
Java代码
viewplaincopytoclipboardprint?
@Override
publicViewgetView(finalintposition,ViewconvertView,finalViewGroupparent){
。。。。。。
//注意该方法中的Item组件不能使用holder模式,如果用该模式,所有的组件将共享item中view的事件
导致监听不到指定item中的view的事件,解决办法就是每次创建一个Item中的组件
然后对于每个item使用不同的监听事件即newTextWatcher()每次都创建一个新的事件监听器
finalViewHolderholder=newViewHolder();
holder.count.addTextChangedListener(newTextWatcher(){
.....
@Override
publicvoidafterTextChanged(Editables){
//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();
});
完整代码如下:
Java代码
viewplaincopytoclipboardprint?
importjava.util.List;
importorg.android.util.NumberUtils;
importandroid.app.Activity;
importandroid.text.Editable;
importandroid.text.TextWatcher;
importandroid.util.Log;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.BaseAdapter;
importandroid.widget.EditText;
importandroid.widget.TextView;
importcom.mmb.shop.R;
/**
*购物车:商品列表
*
*@authorwangtao
*/
publicclassGoodsListAdapterextendsBaseAdapter{
privatestaticListgoods;
privateLayoutInflatermInflater;
privatestaticTextViewtextTotalPrice;
//privateActivitycontext;
publicGoodsListAdapter(Listgoods_,Activitycontext){
goods=goods_;
mInflater=context.getLayoutInflater();
//this.context=context;
}
@Override
publicViewgetView(finalintposition,ViewconvertView,finalViewGroupparent){
//最后一条显示总价
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()+"");