0

私はListViewカスタムアダプターを持っています。各行には。がありEditTextます。それぞれEditTextにその行に関連する初期値があり、ユーザーはを使用してこの値を変更できますEditTexts

これらの変更された値を保存したいと思います。TextWatcherそれぞれに定義しましEditTextたが、特にデータをスクロールまたはフィルタリングすると正しく機能しません。

どうやってやるの?

私は適切なアプローチを使用していますか?

4

1 に答える 1

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) {

        }
    }
于 2013-02-12T09:06:36.347 に答える