Android 滚动时丢失edittext值的Listview
我不擅长android listview和Edittext。然而,关于这个问题,我遇到了一些恼人的问题。我在列表视图中获取值没有任何问题,但当我在编辑文本中输入内容并向下滚动时,编辑文本的值会改变其位置。这是我的密码。 //产品类别Android 滚动时丢失edittext值的Listview,android,listview,android-edittext,adapter,Android,Listview,Android Edittext,Adapter,我不擅长android listview和Edittext。然而,关于这个问题,我遇到了一些恼人的问题。我在列表视图中获取值没有任何问题,但当我在编辑文本中输入内容并向下滚动时,编辑文本的值会改变其位置。这是我的密码。 //产品类别 public class products { public String prod_sl; public String prod_code; public String product_name; public String pro
public class products {
public String prod_sl;
public String prod_code;
public String product_name;
public String product_desc;
public String prod_qnty;
public String prod_uom;
public String prod_price;
boolean ShowName;
public products(String psl, String pcode,String Name, String Desc, String UOM) {
this.prod_sl = psl;
prod_code = pcode;
prod_qnty="";
prod_price ="";
product_name=Name;
product_desc=Desc;
prod_uom =UOM;
}
/* public boolean isShowName() {
return ShowName;
}
public void setShowName(boolean showName) {
ShowName = showName;
}*/
//sl
public String getSl() { return prod_sl; }
public void setSl(String psl) { this.prod_sl = psl; }
//product code
public String getCode() { return prod_code; }
public void setCode(String pcode) { this.prod_code = pcode; }
//product Name
public String getName() { return product_name; }
public void setName(String product_name) { this.product_name = product_name; }
//product desc
public String getDesc() { return product_desc; }
public void setDesc(String product_desc) { this.product_desc = product_desc; }
//product UOM
public String getUom() { return prod_uom; }
public void setUom(String prod_uom) { this.prod_uom = prod_uom; }
// product quantity
public String getQnty() {
return prod_qnty; }
public void setQnty(String prod_qnty) {
this.prod_qnty = prod_qnty; }
//product price
public String getPrice() {
return prod_price; }
public void setPrice(String prod_price) {
this.prod_price = prod_price; }
}
下面是适配器类
public class ListViewAdapter extends ArrayAdapter<products> {
Context mContext;
View v;
private String[] arrTemp;
LayoutInflater inflater;
ArrayList<products> arrayproducts;
public String[] scoresToUpdate=new String[1000];
//public String Array scoresToUpdate =scoresToUpdate[];
public static EditText edit_qnty,prod_price;
public static HashMap<Integer,String> myList=new HashMap<Integer,String>();
public ListViewAdapter(Context context, int resource, ArrayList<products> arrayproducts) {
super(context, resource);
this.mContext = context;
this.arrayproducts = arrayproducts;
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
try {
final int pos=position;
final ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_adapter_view, null);
holder = new ViewHolder();
holder.prod_sl = (TextView) convertView.findViewById(R.id.prod_sl);
holder.prod_code = (TextView) convertView.findViewById(R.id.prod_code);
holder.txtTitle = (TextView) convertView.findViewById(R.id.adapter_text_title);
holder.txtDescription = (TextView) convertView.findViewById(R.id.adapter_text_description);
holder.prod_uom = (TextView) convertView.findViewById(R.id.prod_uom);
holder.prod_qnty = (EditText) convertView.findViewById(R.id.prod_qnty);
holder.prod_price = (EditText) convertView.findViewById(R.id.prod_price);
// edit_qnty = (EditText) convertView.findViewById(R.id.prod_qnty);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
// holder.prod_qnty.setText(scoresToUpdate[pos]);
}
holder.ref = position;
products prod = arrayproducts.get(position);
holder.prod_sl.setText("" + position);
holder.prod_code.setText(prod.getCode());
holder.txtTitle.setText(prod.getName());
holder.txtDescription.setText(prod.getDesc());
holder.prod_uom.setText(prod.getUom());
Log.e("row values",""+position+"\t-"+prod.getCode()+""+prod.getName()+""+prod.getDesc()+""+prod.getUom());
// holder.prod_qnty.setText(arrTemp[position]);
holder.prod_qnty.setText(scoresToUpdate[position]);
holder.prod_qnty.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
arrayproducts.get(pos).setQnty(holder.prod_qnty.getText().toString().trim());
myList.put(pos,arg0.toString().trim());
if (!arg0.equals("0")){
scoresToUpdate[pos] = arg0.toString();
Log.e("On text Change","Pos"+pos+"\tqnty:"+holder.prod_qnty.getText().toString().trim()+"\t Args: "+arg0.toString());
}
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
Log.e("After Text change","Pos"+holder.ref+"\tqnty:"+holder.prod_qnty.getText().toString().trim());
// arrTemp[holder.ref] = arg0.toString();
}
});
//holder.prod_qnty.setText(myList.get(position));
holder.prod_qnty.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
Log.e("Current Qnty",edit_qnty.getText().toString().trim());
if(holder.prod_qnty.getText().toString().trim().equals("0")){
holder.prod_qnty.setText("");
}
String inttext = (""+holder.prod_qnty.getText().toString().trim());
if (!inttext.equals("0")){
holder.prod_price.setText("");
}
return false;
//return true;
}
});
//Using setOnclickListener not setOnCheckedChangeListener
//we need to update adapter once we finish with editing
/* holder.prod_qnty.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
final int pos = v.getId();
final EditText Qnty = (EditText) v;
Log.e("Qnty For the positon","POS: "+pos+"\tQnty: "+Qnty.getText().toString().trim());
arrayproducts.get(pos).setQnty(Qnty.getText().toString().trim());
//holder.prod_qnty.setText(Caption.getText().toString().trim());
}
}
});*/
/* holder.prod_price.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
final int position = v.getId();
final EditText Caption = (EditText) v;
arrayproducts.get(position).setPrice(Caption.getText().toString().trim());
}
}
});
*/
return convertView;
}
catch(Exception e){
Toast.makeText(mContext, "!!!", Toast.LENGTH_SHORT).show();
e.printStackTrace();
Log.e("Exception:",""+e.toString());
}
return convertView;
}
/* @Override
public int getCount() {
return arrayproducts.size();
}*/
@Override
public int getCount() {
// TODO Auto-generated method stub
if(arrayproducts != null && arrayproducts.size() != 0){
return arrayproducts.size();
}
return 0;
}
/*@Override
public Objects getItem(int position) {
// TODO Auto-generated method stub
return arrayproducts[position];
}*/
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public void getQnty(){
if(edit_qnty.getText().toString().trim().equals("0"))
edit_qnty.setText("");
}
static class ViewHolder {
TextView prod_sl;
TextView prod_code;
TextView txtTitle;
TextView txtDescription;
TextView prod_uom;
EditText prod_qnty,prod_price;
TextWatcher qtyWatcher;
TextWatcher priceWatcher;
int ref;
}
}
公共类ListViewAdapter扩展了ArrayAdapter{
语境;
观点五;
私有字符串[]arrTemp;
充气机;
ArrayList arrayproducts;
公共字符串[]scoresToUpdate=新字符串[1000];
//公共字符串数组scoresToUpdate=scoresToUpdate[];
公共静态编辑文本编辑,产品价格;
public static HashMap myList=new HashMap();
公共ListViewAdapter(上下文上下文、int资源、ArrayList arrayproducts){
超级(上下文、资源);
this.mContext=上下文;
this.arrayproducts=arrayproducts;
this.inflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u inflater\u SERVICE);
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
试一试{
最终int pos=位置;
最终持票人;
if(convertView==null){
convertView=充气机。充气(R.layout.list\u adapter\u视图,空);
holder=新的ViewHolder();
holder.prod_sl=(TextView)convertView.findViewById(R.id.prod_sl);
holder.prod_代码=(TextView)convertView.findViewById(R.id.prod_代码);
holder.txtTitle=(TextView)convertView.findViewById(R.id.adapter\u text\u title);
holder.txtDescription=(TextView)convertView.findViewById(R.id.adapter\u text\u description);
holder.prod_uom=(TextView)convertView.findViewById(R.id.prod_uom);
holder.prod_qnty=(EditText)convertView.findViewById(R.id.prod_qnty);
holder.prod_price=(EditText)convertView.findViewById(R.id.prod_price);
//edit_qnty=(EditText)convertView.findViewById(R.id.prod_qnty);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
//holder.prod_qnty.setText(scoresToUpdate[pos]);
}
holder.ref=位置;
products prod=arrayproducts.get(位置);
固定器.产品设置文本(“+位置);
holder.prod_code.setText(prod.getCode());
holder.txtTitle.setText(prod.getName());
holder.txtDescription.setText(prod.getDesc());
holder.prod_uom.setText(prod.getUom());
Log.e(“行值”,“位置+”\t-“+prod.getCode()+”+prod.getName()+“+prod.getDesc()+”+prod.getUom());
//保持架产品设置文本(arrTemp[位置]);
holder.prod_qnty.setText(scoresToUpdate[位置]);
holder.prod_qnty.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列arg0、int arg1、int arg2、int arg3){
//TODO自动生成的方法存根
arrayproducts.get(pos).setQnty(holder.prod_qnty.getText().toString().trim());
myList.put(位置,arg0.toString().trim());
如果(!arg0.equals(“0”)){
scoresToUpdate[pos]=arg0.toString();
Log.e(“在文本更改时”,“Pos”+Pos+”\tqnty:“+holder.prod\u qnty.getText().toString().trim()+”\t Args:“+arg0.toString());
}
}
@凌驾
更改前的公共void(字符序列arg0、int arg1、int arg2、,
int arg3){
//TODO自动生成的方法存根
}
@凌驾
public void PostTextChanged(可编辑arg0){
//TODO自动生成的方法存根
Log.e(“文本更改后”,“Pos”+holder.ref+“\tqnty:”+holder.prod_qnty.getText().toString().trim());
//arrTemp[holder.ref]=arg0.toString();
}
});
//holder.prod_qnty.setText(myList.get(position));
holder.prod_qnty.setOnTouchListener(新视图.OnTouchListener()){
@凌驾
公共布尔onTouch(视图v,运动事件){
//TODO自动生成的方法存根
Log.e(“当前Qnty”,edit_Qnty.getText().toString().trim());
if(holder.prod_qnty.getText().toString().trim().equals(“0”)){
持牌人.产品编号.setText(“”);
}
字符串inttext=(“”+holder.prod_qnty.getText().toString().trim());
如果(!inttext.equals(“0”)){
持有人。产品价格。setText(“”);
}
返回false;
//返回true;
}
});
//使用setOnclickListener而不是setOnCheckedChangeListener
//完成编辑后,我们需要更新适配器
/*holder.prod_qnty.setOnFocusChangeListener(新视图.OnFocusChangeListener()){
public void onFocusChange(视图v,布尔hasFocus){
如果(!hasFocus){
final int pos=v.getId();
最终编辑文本Qnty=(编辑文本)v;
Log.e(“位置的Qnty”,“位置:+POS+”\tQnty:+Qnty.getText().toString().trim());
arrayproducts.get(pos.setQnty(Qnty.getText().toString().trim());
//holder.prod_qnty.setText(Caption.getText().toString().trim());
}
if (holder.qtyWatcher != null) {
holder.txtFourth.removeTextChangedListener(holder.qtyWatcher);
}
// Create the TextWatcher corresponding to this row
holder.qtyWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
if(s.toString().equals("")||s.toString().equals("0")){
arrayproducts.get(position).setQnty("0");
}
else{
arrayproducts.get(position).setQnty(s.toString());
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
};