我所有,的Android,EditText.getText()返回旧值
我有用于“内联编辑”两EditText
个奇怪的问题;他们不会提供最新的文字内容:
我的Activity
包含一个SwipeView
,其中每个页面包含一个带两列的TableLayout
。第一列是接受两种状态的自定义组件NameView
:查看和编辑。
当用户长按NameView
在VIEW状态,切换到谁显示两个EditText
的编辑状态(姓和名)。用户可以通过ToolBar
的按钮验证或取消其更改,或通过键盘验证(IME DONE)。 查看状态显示一个TextView
谁显示全名(firstName.toUpperCase()+" "+lastName
)。
一切都很好,直到我发现EditText.getText().toString()
从编辑状态返回旧文:
从NameView
在编辑状态,如果我改变了文本,然后按从ToolBar
然后验证按钮从EditText.getText().toString()
返回的文本是旧文本,而不是我输入的文本。 但是,如果我通过键盘验证(IME'DONE'),那么文本是正确的。
public class NameView implements MyAppToolbar.OnValidateListener {
private EditText edtFirstName;
private EditText edtLastName;
private void init() {
// Inject views
// bind IME done to 'onValidate'
edtLastName.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
onValidate();
return true;
}
return false;
}
});
// bind Toolbar validate to 'onValidate'
toolbar.setOnValidateListener(this);
}
public void onValidate() {
editPresenter.onValidateButtonClicked();
}
public String getFirstName() {
return edtFirstName.getText().toString();
}
public String getLastName() {
return edtLastName.getText().toString();
}
}
public class EditPresenter {
public void onValidateButtonClicked() {
User copy = new User(user.getId(), view.getFirstName(), view.getLastName());
if (validator.accept(copy)) {
// persist
} else {
view.setFirstNameInvalid(true);
view.setLastNameInvalid(true);
}
}
}
我想为这些行使用'内联编辑',因为我的应用中几乎所有其他应用都使用'内联编辑'。而且我不想仅显示两个文本字段的对话框。
你为什么低估了我的问题?我认为他是清楚和研究。 –