カスタムクラスで満たされたlistViewがありますBaseAdapterを拡張します
private List<Bundle> allTipologiaInsetti = ....;
listView.setAdapter(new CustumAdapter(getBaseContext(), allTipologiaInsetti, this));
それから私のアダプターで..
public class CustumAdapter extends BaseAdapter {
public CustumAdapter (Context context, List<Bundle> items, RaccoltaDatiQuestions activity) {
// TODO Auto-generated constructor stub
this.context = context;
this.items = items;
//update
map = new HashMap<Number, String>();
}
...
public View getView(final int position, View convertView, ViewGroup parent) {
Bundle myObj = items.get(position);
ViewHolder holder;
view = convertView;
if (view == null ) {
holder = new ViewHolder();
view = inflater.inflate(R.layout.tipologia_insetti_item, null);
holder.campoNum = (EditText) view.findViewById(R.id.numField);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
//UPDATE
String num = map.get(position);
if(num!=null && !num.equals("")){
holder.campoNum.setText(num + "");
}else {
holder.campoNum.setText(myObj.getInt("num") + "");
}
holder.campoNum.addTextChangedListener(new GenericTextWatcher(holder.campoNum, position));
}
public GenericTextWatcher(EditText campNum, int position) {
this.position = position;
this.campoNum = campNum;
}
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { }
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { }
public void afterTextChanged(Editable s) {
if (campoNum.getText().length() > 0) {
if (campoNum.getText().hashCode() == s.hashCode()) {
Bundle myObj = items.get(position);
myObj.putInt("num", Integer.parseInt(s.toString()));
//UPDATE
map.put(position, s.toString());
}
}
}
}
「campoNum」は編集テキストです:
リストの最初のアイテムで「campoNum」の値を変更します(そしてそれはうまくいきます)が、下にスクロールすると、リストの他のいくつかのアイテムは最初のアイテムと同じ値を保持します....
私はそれを分析しようとしましたが、次のことがわかりました。
リストに 3 つのアイテムが表示されていて、最初のアイテムを変更すると、5 番目は最初と同じ値になり、最初のアイテムを変更すると 4 つのアイテムが表示されると、6 番目も変更されます... など。
「if (view == null )」を削除して、毎回ビューを膨らませるようにすると、問題は解決します!
私がよく理解している場合:リストの1つのアイテムが非表示になるたびに(最初のアイテム)、新しく表示されるアイテム(5番目のアイテム)に使用され、5番目のアイテムに渡されたconvertVIewは最初のアイテムと同じです
助言がありますか?