我有几行 EditText 对象,它们由我的自定义 BaseAdapter 类维护。
EditText 对象应该只能接受数字。在显示的图像中,我输入了“12345”。如您所见,我键入的所有内容都会立即被复制。
我发现如果我删除为数字过滤 EditText 的代码行,问题就会消失:
et.setInputType(InputType.TYPE_CLASS_PHONE);
知道发生了什么吗?
我正在使用 TextWatcher 来监听输入,您可以在 getView() 方法中看到它:
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.number, null);
holder = new ViewHolder();
holder.editText = (EditText) convertView.findViewById(R.id.number_edittext);
holder.editText = setEditTextFilters(holder.editText);
holder.editText.addTextChangedListener(new TextWatcher() {
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2){}
public void onTextChanged(CharSequence s, int start, int before, int count) {}
public void afterTextChanged(Editable s) {
textBoxStrings[holder.row] = s.toString();
System.out.println("row: " + holder.row + " " + s.toString());
}
});
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.row = position;
holder.editText.setText(textBoxStrings[holder.row]);
TextView rowtext = (TextView) convertView.findViewById(R.id.number_rowtext);
rowtext.setText("Row " + holder.row);
return convertView;
}
使用以下方法将过滤器添加到 EditText:
public EditText setEditTextFilters(EditText et) {
int maxLength = numColsMEM;
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(maxLength);
et.setFilters(FilterArray);
et.setInputType(InputType.TYPE_CLASS_PHONE);
et.setSingleLine();
return et;
}
最佳答案
我有一种预感,问题可能是您的 textChangedListener 不应该设置 textBoxStrings[holder.row],因为默认的 textChangedListener 可能已经这样做了。
关于Android EditText 复制我输入的每个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8197986/