Как избежать обновления значений edittext в Listview при прокрутке?
У меня есть просмотр списка с двумя текстовыми представлениями и редактированием текста. Я использовал пользовательский адаптер для заполнения списка (так же, как и месяц назад), поэтому я спрашиваю, как избежать обновления текстов редактирования при прокрутке списка, поскольку я хочу сохранить данные по каждому тексту редактирования. Поможет ли textwatcher каким-либо образом избежать обновления и сохранения? Если да, пожалуйста, помогите. Я включил мою модель и класс адаптера здесь:
Модельный класс:
public class InternalListModel {
String no;
String name;
String value;
public InternalListModel(String internNo, String internName) {
// TODO Auto-generated constructor stub
this.no=internNo;
this.name=internName;
value="";
}
public String getNo(){
return no;
}
public String getName(){
return name;
}
public String getValue(){
return value;
}
public void setValue(String value){
this.value=value;
}
}
Пользовательский класс адаптера:
public class InternCustomAdapter extends ArrayAdapter<InternalListModel>
{
private final List<InternalListModel> internnoname;
private final Internal6 context;
public InternCustomAdapter(Internal context,
List<InternalListModel> internnoname) {
super(context,R.layout.internlistdecor,internnoname);
// TODO Auto-generated constructor stub
this.context=context;
this.internnoname=internnoname;
}
static class ViewHolder{
protected TextView textview,textview1;
protected EditText edittext;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final ViewHolder viewHolder;
if(convertView ==null){
LayoutInflater inflator = context.getLayoutInflater();
convertView = inflator.inflate(R.layout.internlistdecor,null);
viewHolder = new ViewHolder();
viewHolder.textview=(TextView)convertView.findViewById(R.id.tvintNO);
viewHolder.textview1=(TextView)convertView.findViewById(R.id.tvintName);
viewHolder.edittext = (EditText)convertView.findViewById(R.id.etintValue);
viewHolder.edittext.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.tvintNO, viewHolder.textview);
convertView.setTag(R.id.tvintName, viewHolder.textview1);
convertView.setTag(R.id.etintValue, viewHolder.edittext);
}
else
{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.textview.setText(internnoname.get(position).getNo());
viewHolder.textview1.setText(internnoname.get(position).getName());
viewHolder.edittext.setText(internnoname.get(position).getValue());
return convertView;
}
}
1 ответ
Вы можете установить введенный текст в поле значения для этой позиции (индекс)
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
internnoname.get(position).setValue(s.toString());
}
Таким образом, даже когда представления перерабатываются, в зависимости от позиции, значение будет правильно установлено на EditTexView
из-за кода ниже:
viewHolder.edittext.setText(internnoname.get(position).getValue());