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