gpt4 book ai didi

android - ListView edittext 数据在 Android 中滚动时丢失

转载 作者:行者123 更新时间:2023-11-29 15:11:58 25 4
gpt4 key购买 nike

我希望具有 2 个编辑文本的 ListView 即使在滚动后变得不可见后也能保留值。当 edittext 失去焦点时,我希望将每个 edittext 值保存在一个数组列表中(2 个数组列表 - 一个用于数量,一个用于价格),稍后我可以将其保存到数据库中。我尝试将代码放在 OntextChanegd 方法中,但它似乎不正确。

public class CustomAdapter extends BaseAdapter {
ArrayList<String> names;
Context context;
ArrayList<String> itemPrices = new ArrayList<>();
ArrayList<String> quantities = new ArrayList<>();

CustomAdapter(ArrayList v, Context c) {
names = v;
context = c;
}

@Override
public int getCount() {
return names.size();
}

@Override
public Object getItem(int position) {
return names.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

try {
final ViewHolder holder;
// TODO Auto-generated method stub
if (convertView == null) {
holder = new ViewHolder();

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row, null);

holder.textView = (TextView) convertView.findViewById(R.id.rowText);
holder.editQty = (EditText) convertView.findViewById(R.id.qty);
holder.editprice = (EditText) convertView.findViewById(R.id.price);
holder.textView.setTextSize(20);
holder.textView.setTextColor(Color.BLACK);

convertView.setTag(holder);

} else {
holder = (ViewHolder) convertView.getTag();
}
holder.ref = position;

holder.textView.setText(names.get(position));
holder.editQty.setHint("Quantity");
holder.editprice.setHint("Price");
holder.editQty.addTextChangedListener(new TextWatcher() {
@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) {

}
});
holder.editprice.addTextChangedListener(new TextWatcher() {
@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) {

}
});



return convertView;
}catch (NumberFormatException ex){
Toast.makeText(context,"!!!",Toast.LENGTH_SHORT).show();
ex.printStackTrace();
}


return convertView;
}




private class ViewHolder {
TextView textView;
EditText editQty;
EditText editprice;

int ref;
}

最佳答案

将监听器添加到 ViewHolder

 private class ViewHolder {
TextView textView;
EditText editQty;
EditText editprice;
TextWatcher qtyWatcher;
TextWatcher priceWatcher;
int ref;
}

现在在 getView() 方法中删除 edittext 的现有监视程序,然后更新 edittext 中的文本并设置新的文本监视程序。

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

try {
final ViewHolder holder;
// TODO Auto-generated method stub
if (convertView == null) {
holder = new ViewHolder();

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row, null);

holder.textView = (TextView) convertView.findViewById(R.id.rowText);
holder.editQty = (EditText) convertView.findViewById(R.id.qty);
holder.editprice = (EditText) convertView.findViewById(R.id.price);
holder.textView.setTextSize(20);
holder.textView.setTextColor(Color.BLACK);

convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.ref = position;
if (holder.qtyWatcher != null) {
holder.editQty.removeTextChangedListener(holder.qtyWatcher);
}
if (holder.priceWatcher != null) {
holder.editprice.removeTextChangedListener(holder.priceWatcher);
}
holder.textView.setText(names.get(position));
holder.editQty.setHint("Quantity");
holder.editprice.setHint("Price");
if(position<quantities.size())
holder.editQty.setText(quantities.get(position));
else
holder.editQty.setText("");
if(position<itemPrices.size())
holder.editprice.setText(itemPrices.get(position));
else
holder.editprice.setText("");
holder.qtyWatcher = new TextWatcher() {
@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) {
//Update the quantity
}
};
holder.editQty.addTextChangedListener(holder.qtyWatcher);
holder.priceWatcher = new TextWatcher() {
@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) {
//Update you price
}
};
holder.editprice.addTextChangedListener(holder.priceWatcher);

return convertView;
} catch (NumberFormatException ex) {
Toast.makeText(context, "!!!", Toast.LENGTH_SHORT).show();
ex.printStackTrace();
}
return convertView;
}

关于android - ListView edittext 数据在 Android 中滚动时丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30528328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com