android中ListView结合EditText复杂操作
来源:互联网 发布:java ssh面试题 编辑:程序博客网 时间:2024/06/05 14:23
1、实现功能描述:
要实现一个新建订单的功能,新建订单界面有一个ListView可以动态添加订单行(动态添加Item),并且可以修改订单行中的数据(可以编辑EditText并且获取EditText进行计算显示)
2、实现思路:
在订单界面定义一个添加按钮,点击添加按钮跳转到物品列表选择物品,通过Intent传递到订单界面,加入到ListView中。
3、具体实现:
注意:需要一个文件保存已经添加到列表的数据,每次为订单的ListView添加数据时,先从文件中读取数据,再将新加入的数据加入,再加载到ListView上。
主要有三个点:
1、自定义myTextWatcher,为了获取ViewHolder,以获取当前点击的item
2、自定义myOnFocusChangeListener,为了获取ViewHolder,以获取当前点击的item
3、在布局中定义一个textview用于记录当前Item在stockBeenList中的位置,为了保存和获取对应stockBeenList中的数据
适配器代码:
package com.wxcoming.wxcomingerp.sale.neworder.adapter;import android.app.DatePickerDialog;import android.content.Context;import android.text.Editable;import android.text.TextUtils;import android.text.TextWatcher;import android.text.method.PasswordTransformationMethod;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.DatePicker;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.TextView;import com.wxcoming.wxcomingerp.R;import com.wxcoming.wxcomingerp.bean.SaleFindOrderLine;import com.wxcoming.wxcomingerp.bean.Ware;import java.util.Calendar;import java.util.List;/** * * Created by adolph_jun on 2017/10/10. */public class SaleNewOrderAdapter extends BaseAdapter { private List<SaleFindOrderLine> stockBeenList; private Context context; private int mSt_Year, mSt_Month, mSt_Day; private int mEnd_Year, mEnd_Month, mEnd_Day; private int mNow_Year, mNow_Month, mNow_Day; public SaleNewOrderAdapter(List<SaleFindOrderLine> stockBeenList, Context context){ this.stockBeenList = stockBeenList; this.context = context; Calendar now = Calendar.getInstance(); mEnd_Year = mSt_Year = mNow_Year = now.get(Calendar.YEAR); mEnd_Month = mSt_Month = mNow_Month = now.get(Calendar.MONTH)+1; mEnd_Day = mSt_Day = mNow_Day = now.get(Calendar.DAY_OF_MONTH); } @Override public int getCount() { return stockBeenList.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return position; } ViewHolder holder = null; @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null){ convertView = LayoutInflater.from(context).inflate(R.layout.item_sale_neworder_list,null,false); holder = new ViewHolder(); holder.Tv_Code = (TextView) convertView.findViewById(R.id.SaleNewOrder_item_wareCode); holder.Tv_Name = (TextView) convertView.findViewById(R.id.SaleNewOrder_item_wareName); holder.Et_price = (EditText) convertView.findViewById(R.id.SaleNewOrder_item_price); holder.Et_quantity = (EditText) convertView.findViewById(R.id.SaleNewOrder_item_qu); holder.Tv_money = (TextView) convertView.findViewById(R.id.SaleNewOrder_item_money); holder.Tv_model = (TextView) convertView.findViewById(R.id.SaleNewOrder_item_model); holder.Tv_size = (TextView) convertView.findViewById(R.id.SaleNewOrder_item_size); holder.Tv_unit = (TextView) convertView.findViewById(R.id.SaleNewOrder_item_unit); holder.Tv_delivery = (TextView) convertView.findViewById(R.id.SaleNewOrder_item_deliveryDate); holder.Tv_send = (TextView) convertView.findViewById(R.id.SaleNewOrder_item_sendDate); holder.Tv_pis = (TextView) convertView.findViewById(R.id.SaleNewOrder_item_pis); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.Tv_Code.setText("物料编码:"+stockBeenList.get(position).getWareCode()); holder.Tv_Name.setText("物料名称:"+stockBeenList.get(position).getWareName()); holder.Tv_model.setText("规格:"+stockBeenList.get(position).getWareModel()); holder.Tv_size.setText("尺寸:"+stockBeenList.get(position).getWareSize()+position); holder.Tv_pis.setText(position+""); holder.Tv_unit.setText("单位:"+stockBeenList.get(position).getUnitName()); holder.Tv_delivery.setText(stockBeenList.get(position).getDeliveryDate()); holder.Tv_send.setText(stockBeenList.get(position).getSend_date()); //价格Edittext的点击事件 if(holder.Et_price.getTag() instanceof TextWatcher){ holder.Et_price.removeTextChangedListener((TextWatcher) holder.Et_price.getTag()); } holder.Et_price.setText(stockBeenList.get(position).getPrice()+""); final myTextWatcher watcher = new myTextWatcher(holder) { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void afterTextChanged(Editable s) { int pis = Integer.parseInt(v.Tv_pis.getText().toString()); if(TextUtils.isEmpty(s)){ stockBeenList.get(pis).setPrice(0); }else{ float p = Float.parseFloat(s.toString()); stockBeenList.get(pis).setPrice(p); stockBeenList.get(pis).setMoney(p* stockBeenList.get(pis).getOrder_quantity()); v.Tv_money.setText("金额:"+stockBeenList.get(pis).getMoney()+""); } } }; holder.Et_price.setOnFocusChangeListener(new myOnFocusChangeListener(holder) { @Override public void onFocusChange(View v, boolean hasFocus) { v1.Et_price.addTextChangedListener(watcher); v1.Et_price.setTag(watcher); } }); //数量Edittext的点击事件 if(holder.Et_quantity.getTag() instanceof TextWatcher){ holder.Et_quantity.removeTextChangedListener((TextWatcher) holder.Et_quantity.getTag()); } holder.Et_quantity.setText(stockBeenList.get(position).getOrder_quantity()+""); final myTextWatcher watcher1 = new myTextWatcher(holder) { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void afterTextChanged(Editable s) { int pis = Integer.parseInt(v.Tv_pis.getText().toString()); if(TextUtils.isEmpty(s)){ stockBeenList.get(pis).setOrder_quantity(0); }else{ float p = Float.parseFloat(s.toString()); stockBeenList.get(pis).setOrder_quantity(p); stockBeenList.get(pis).setMoney(p* stockBeenList.get(pis).getPrice()); v.Tv_money.setText("金额:"+stockBeenList.get(pis).getMoney()+""); } } }; holder.Et_quantity.setOnFocusChangeListener(new myOnFocusChangeListener(holder) { @Override public void onFocusChange(View v, boolean hasFocus) { v1.Et_quantity.addTextChangedListener(watcher1); v1.Et_quantity.setTag(watcher1); } }); holder.Tv_money.setText(stockBeenList.get(position).getMoney()+""); DateListener(holder); return convertView; } //日期选择监听事件 private void DateListener(final ViewHolder holder) { holder.Tv_delivery.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new DatePickerDialog(context, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { int pis = Integer.parseInt(holder.Tv_pis.getText().toString()); mSt_Year = year; mSt_Month = monthOfYear; mSt_Day = dayOfMonth; holder.Tv_delivery.setText(mSt_Year+"-"+mSt_Month+"-"+mSt_Day); stockBeenList.get(pis).setDeliveryDate(mSt_Year+"-"+mSt_Month+"-"+mSt_Day); } }, mNow_Year, mNow_Month, mNow_Day).show(); } }); holder.Tv_send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new DatePickerDialog(context, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { int pis = Integer.parseInt(holder.Tv_pis.getText().toString()); mEnd_Year = year; mEnd_Month = monthOfYear; mEnd_Day = dayOfMonth; holder.Tv_send.setText(mEnd_Year+"-"+mEnd_Month+"-"+mEnd_Day); stockBeenList.get(pis).setSend_date(mEnd_Year+"-"+mEnd_Month+"-"+mEnd_Day); } }, mNow_Year, mNow_Month, mNow_Day).show(); } }); } static class ViewHolder{ private TextView Tv_Code; private TextView Tv_Name; private EditText Et_price; private EditText Et_quantity; private TextView Tv_money; private TextView Tv_model; private TextView Tv_size; private TextView Tv_unit; private TextView Tv_delivery; private TextView Tv_send; private TextView Tv_pis;//记录当前Item在stockBeenList中的位置,为了保存和获取对应stockBeenList中的数据 }}/** * 自定义myTextWatcher,为了获取ViewHolder,以获取当前点击的item */class myTextWatcher implements TextWatcher{ SaleNewOrderAdapter.ViewHolder v; public myTextWatcher(SaleNewOrderAdapter.ViewHolder v){ this.v = v; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { }}/** * myOnFocusChangeListener,为了获取ViewHolder,以获取当前点击的item */class myOnFocusChangeListener implements View.OnFocusChangeListener{ SaleNewOrderAdapter.ViewHolder v1; public myOnFocusChangeListener(SaleNewOrderAdapter.ViewHolder v ){ this.v1 = v; } @Override public void onFocusChange(View v, boolean hasFocus) { }}
阅读全文
0 0
- android中ListView结合EditText复杂操作
- Android ListView 中嵌套EditText
- Android中listview中editText局部刷新
- 【Android】ListView中EditText焦点问题
- Android在Listview中使用EditText
- 【Android】ListView中EditText焦点问题
- 【Android】ListView中EditText焦点问题
- android中ListView中的EditText不可编辑
- 【Android】ListView中EditText焦点问题
- Android中ListView,SQLite,BaseAdapter的结合
- Android中ListView,SQLite,BaseAdapter的结合
- Android中ListView,SQLite,BaseAdapter的结合
- android开发中 listview和checkbox结合
- Android中 PopupWindow 与 ListView 结合使用
- Android中ListView与CheckBox结合-…
- Android中ListView与CheckBox结合-…
- Android复杂ListView
- ListView与CheckBox,EditText,Button结合
- CorelDRAW 巧克力让人联想的才是真的杰作不是吗
- LaTex: 基础知识
- java解析Pcap(io.pkts)
- Java:生成一个随机码
- Eclipse中更改某项目的编码/打开项目乱码
- android中ListView结合EditText复杂操作
- 守望者的逃离(计蒜客)
- ubuntu16.04下tensorflow1.0+CUDA8.0+cudnn8.0+chrome+flash+shutter+声音配置
- 总结-2017/10/26
- C
- spring整合mybatis详解
- Struts中的标签
- 备忘:强制关机引起VMware虚拟机无法打开
- 大学编程3年学习的感受