I have a ListView with the ViewHolder pattern. On the screen there is room for 10 rows. When I scroll down the ListView then android calls getView with position = 12 but the convertView.getTag() returns a ViewHolder with position = 0.
Here is my code:
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
ViewHolder holder;
TextView positionText;
TextView nameText;
//TextView resultText;
//TextView unitText;
//TextView remarkText;
if (convertView == null) {
convertView = inflater.inflate(R.layout.row_maintenancetask, null);
maxPosition = position;
EditText remarkText;
EditText resultText;
remarkText = (EditText) convertView.findViewById(R.id.remarktext);
resultText = (EditText) convertView.findViewById(R.id.editTextResult);
holder = new ViewHolder();
holder.position = position;
holder.edtRemark = remarkText;
holder.edtResultText = resultText;
holder.edtRemark.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
//setting data to array, when changed
m_maintenancetasks.get(pos).setMaintenanceTaskRemark(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
holder.edtResultText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
//setting data to array, when changed
m_maintenancetasks.get(pos).setMaintenanceTaskResult(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
else
{
holder = (ViewHolder)convertView.getTag();
}
positionText = (TextView) convertView.findViewById(R.id.positiontext);
nameText = (TextView) convertView.findViewById(R.id.nametext);
//resultText = (TextView) convertView.findViewById(R.id.resulttext);
//unitText = (TextView) convertView.findViewById(R.id.maintenanceunittext);
holder.edtRemark.setOnTouchListener(onListTouch);
holder.edtRemark.setText(m_maintenancetasks.get(position).getMaintenanceTaskRemark());
holder.edtResultText.setOnTouchListener(onListTouch);
holder.edtResultText.setText(m_maintenancetasks.get(position).getMaintenanceTaskResult());
convertView.setOnTouchListener(onListTouch);
convertView.setTag(holder);
return convertView;
}
private class ViewHolder {
Integer position;
EditText edtRemark;
EditText edtResultText;
}