2015-05-20 58 views
-1

我所有,的Android,EditText.getText()返回旧值

我有用于“内联编辑”两EditText个奇怪的问题;他们不会提供最新的文字内容:

我的Activity包含一个SwipeView,其中每个页面包含一个带两列的TableLayout。第一列是接受两种状态的自定义组件NameView查看编辑

当用户长按NameViewVIEW状态,切换到谁显示两个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); 
     } 
    } 
} 

我想为这些行使用'内联编辑',因为我的应用中几乎所有其他应用都使用'内联编辑'。而且我不想仅显示两个文本字段的对话框。

+0

你为什么低估了我的问题?我认为他是清楚和研究。 –

回答

0

好吧,

最后,这是一个竞争条件谁使我们以为的EditText返回旧的值。