2013-02-12 3 views
0

У меня есть ListView с пользовательским адаптером. Каждая строка имеет EditText. Каждое EditText имеет начальное значение, относящееся к этой строке, и пользователь может изменить это значение, используя EditTexts.Как сохранить изменения EditText в элементах ListView?

Я хочу сохранить эти измененные значения. Я определил TextWatcher для каждого EditText, но он работает некорректно, особенно при прокрутке или фильтрации данных.

Как я могу это сделать?

Я использую подходящий подход?

ответ

0

Проблема была TextWatcher. Я решил это, используя OnKeyListener:

private boolean programmaticalTextChange = false; 

private KeyEvent UnknownKey = new KeyEvent(KeyEvent.ACTION_DOWN, 
      KeyEvent.KEYCODE_UNKNOWN); 

    public class MyTextWatcher implements TextWatcher 
    { 
     private EditText editText; 

     public MyTextWatcher(EditText editText) 
     { 
      this.editText = editText; 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // 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 onTextChanged(CharSequence s, int start, int before, 
       int count) { 
      if (!programmaticalTextChange) 
       editText.dispatchKeyEvent(UnknownKey); 
     } 
    } 


@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
     //... 
     myEditText.setOnKeyListener(new OnKeyListener() { 

      @Override 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       updateItem(item, v, rowView); 
       return false; 
      } 
     }); 
     myEditText.addTextChangedListener(new MyTextWatcher(myEditText)); 

} 

protected void updateItem(MyClass item, View v) { 
     try { 
      item.Qty = Double.valueOf(((EditText) v).getText() 
        .toString()); 
     } catch (Exception e) { 

     } 
    } 
Смежные вопросы