【发布时间】:2017-01-31 13:11:04
【问题描述】:
我有一个带有 ViewHolder 模式的 ListView。屏幕上有 10 行的空间。当我向下滚动 ListView 时,android 使用 position = 12 调用 getView 但 convertView.getTag() 返回一个 position = 0 的 ViewHolder。
这是我的代码:
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;
}
【问题讨论】:
标签: android