私はListView
カスタムアダプターを持っています。各行には。がありEditText
ます。それぞれEditText
にその行に関連する初期値があり、ユーザーはを使用してこの値を変更できますEditTexts
。
これらの変更された値を保存したいと思います。TextWatcher
それぞれに定義しましEditText
たが、特にデータをスクロールまたはフィルタリングすると正しく機能しません。
どうやってやるの?
私は適切なアプローチを使用していますか?
私はListView
カスタムアダプターを持っています。各行には。がありEditText
ます。それぞれEditText
にその行に関連する初期値があり、ユーザーはを使用してこの値を変更できますEditTexts
。
これらの変更された値を保存したいと思います。TextWatcher
それぞれに定義しましEditText
たが、特にデータをスクロールまたはフィルタリングすると正しく機能しません。
どうやってやるの?
私は適切なアプローチを使用していますか?
問題はによってでした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) {
}
}