2

Androidアプリでカスタムリストビューを使用しています。問題は、ListViewをスクロールしているときに、入力されたデータをEditText(Edittext as list_item)から自動的にクリアし、ListViewが更新されることです。ListViewScrollに入力されたデータのクリアを停止しないようにしたい。私を助けてください..

4

2 に答える 2

1

1)カスタムリストアダプタを定義する

2)次のような各アイテムのオブジェクトを定義しますclass MyClass { String myText}

3)各アイテムのEditTextの値をそのオブジェクトに保存します

CheckBoxの状態を保存するためのコードがあります。EditText用に使用およびカスタマイズします。

protected interface MyTextWatcher extends TextWatcher {

    public void setEnabled(EditText editText, boolean enable);

    public void setText(EditText editText, String text);
}

private MyTextWatcher generalTextWatcher = new MyTextWatcher() {

        private boolean enabled_edtQty = true;
        private boolean enabled_edtPackingQty = true;

        public void setEnabled(EditText editText, boolean enable) {
            if (editText.equals(edtQty))
            {
                this.enabled_edtQty = enable;
            }
            else if (editText.equals(edtPackingQty))
            {
                this.enabled_edtPackingQty = enable;
            }
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            if (this.enabled_edtQty && edtQty != null
                    && edtQty.getText().hashCode() == s.hashCode())
            {
                edtQty_onTextChanged(s, start, before, count);
            }
            else if (this.enabled_edtPackingQty && edtPackingQty != null
                    && edtPackingQty.getText().hashCode() == s.hashCode())
            {
                edtPackingQty_onTextChanged(s, start, before, count);
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        @Override
        public void afterTextChanged(Editable s) {

        }

        @Override
        public void setText(EditText editText, String text) {

            this.setEnabled(editText, false);

            editText.setText(text);

            this.setEnabled(editText, true);
        }

    };


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

            View rowView;
            final MyClass item = getItem(position);

             edtQty.addTextChangedListener(generalTextWatcher);
             edtPackingQty.addTextChangedListener(generalTextWatcher);

             generalTextWatcher.setText(edtQty, item.myText1);
             generalTextWatcher.setText(edtPackingQty, item.myText2);


    }


    protected void edtQty_onTextChanged(CharSequence s, int start, int before,
            int count) {
                              item.myText1 = s;
            }

    protected void edtPackingQty_onTextChanged(CharSequence s, int start, int before,
            int count) {
                              item.myText2 = s;
            }

あなたの状況では、addTextChangedListener代わりに使用する必要がありますsetOnCheckedChangeListener

于 2013-01-05T08:15:06.750 に答える
0

breceivemail による回答は正しいです。

データの保存に ArrayList を使用することもできます onTextChangeListener は必要に応じてデータを保存でき、リストビューのアダプターの getView でデータを復元できます

注: スクロール時にリストビューが更新されないようにする方法を探している場合は、間違った方向に進んでいます。なぜなら、リストビューがその内容を更新するのを止めることはできないからです (画面外の内容はすべてリストビューにダンプされるため)。リストビューで必要なときにデータを保存/提供します(データを手動で保存/復元する必要があるデータを保護/保存するためにシステムに頼ることはできません)。

于 2013-01-05T08:39:06.187 に答える