我一直在网上寻找可能的答案。我找到了一个,但它会在滚动时继续改变它的价值。我不知道我的代码的哪一部分会让它发生变化。我的自定义EditText
中有TextView
和ListView
。 TextView
将保留数据库中的学生列表,EditText
将让用户输入相应学生的分数。这是我的代码
public class RecordAdapter extends ArrayAdapter<String>{
private final Context context;
private final String[] values;
String value;
public RecordAdapter(Context context, String[] values) {
super(context, R.layout.row1, values);
this.context = context;
this.values = values;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
value = "0";
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row1, null);
holder.scoreEditText = (EditText) convertView.findViewById(R.id.scores);
holder.nameTextView = (TextView)convertView.findViewById(R.id.name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.nameTextView.setText(value);
holder.nameTextView.setText(values[position]);
holder.scoreEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
value = holder.scoreEditText.getText().toString();
value = s.toString();
}
});
return convertView;
}
static class ViewHolder{
public TextView nameTextView;
public EditText scoreEditText;
}
}
请帮忙。非常感谢你。
答案 0 :(得分:4)
每次更新行时,都会调用getView()
。然后使用value = "0"
将文本设置为0,因此不会应用afterTextChanged
中对字符串值的更新。修复此声明,将String文本调用为适配器类中的全局,如:String value = "0"
,并从value = "0"
方法中删除getView()
。
除此之外,
value = s.toString();
value = holder.scoreEditText.getText().toString();
移至onTextChanged(..)
将以下内容添加到适配器类:
public int getViewTypeCount() {
return getCount();
}
public int getItemViewType(int position) {
return position;
}
答案 1 :(得分:0)
不建议将EditText放在listView中,因为它会导致listView本身发生更改(因为键盘)。
相反,你应该使用简单的TextView,如果你想在那里编辑某些内容,可以使用带有它的对话框或允许你编辑值的新活动。
在任何情况下,如果您仍希望在listView中使用EditText,则应在每次更改其文本时保存它所保存的数据(请注意,对于“afterTextChanged”,您没有将数据保存到“值”中变量),并在getView上恢复它。
您还应该考虑使用“onTextChanged”而不是“afterTextChanged”