インライン編集用に ListView 内に EditText があります。ユーザーはその値を変更でき、値は SQLite データベースに保存されます。
ListView の作成にカスタム DataAdapter を使用しています。
リストビューには 15 行あります。一度に 4 行が表示されます。他の行を表示するには、スクロールバーを使用します (上/下)
問題: ListView が初めて読み込まれます。ユーザーは、各 EditText の EditText 1、2、3、4 に書き込みます。スクロールバーが下に移動し、ユーザーがすべての行に 1 つずつデータを入力します。ユーザーがスクロールバーを上に動かして最初の 4 行を表示すると、4 行目には 4 ではなく間違ったデータが表示され、ユーザーが最後に入力した値である 14 が表示されます(または、10/ 13/11など)
私のカスタム DataAdapter クラスでは、以下に示すように、EditText がフォーカスを失ったときに、ユーザー入力をデータソースに格納しています。
public View getView(int position, View convertView, ViewGroup parent) {
//txtComments is an EditText
holder.txtComments.setId(position);
holder.txtComments.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus){
final int position = v.getId();
final EditText tempComments = (EditText) v;
// items: the DataSource for the listView
items.get(position).Comments = tempComments.getText().toString();
}
}
});
}
編集:
TEXTWATCHER も試しましたが、うまくいきません。
広範なテストの後。この問題はランダムに発生することがわかりました。たとえば、ExitText11 が間違った値を表示したり、ExitText4 が間違った値を表示したり、両方とも間違った値を表示したり、スクロールバーを上下に移動するとこの動作が変化したりします。