嗨,我有这段代码:
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
morseText = editText.getText().toString();
message.setText("Sending Message...");
message.setTextColor(Color.BLACK);
sendMessage();
return handled;
}
});
一切都按预期工作,除了setText和setTextColor在sendMessage()已经完成后生效,而对于记录,sendMessage()可能需要几秒钟。 我需要在sendMessage之前更改文本。
我如何解决这个问题以及为什么会这样? 谢谢
答案 0 :(得分:2)
setText和setTextColor在sendMessage()完成后生效
在onEditorAction()
返回时,将主应用程序线程的控制权返回给框架后,它们才会生效。
记录sendMessage()的可能需要几秒钟
然后,这项工作必须在后台线程上完成。
我该如何解决?
将任何需要超过主应用程序线程约1毫秒的工作移到后台线程上。您可能希望详细了解Android's threading model。
答案 1 :(得分:0)
尝试使用此代码运行sendMessage():
new Handler().post(new Runnable(){
public void run(){
sendMessage();
}
});
或使用postDelay替换帖子。
答案 2 :(得分:0)
在UI有机会绘制您的更改后延迟sendMessage
。此外,如果sendMessage
需要几秒钟的时间,请考虑将其放在IO线程上。
TextView editText = null;
assert editText != null;
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
morseText = editText.getText().toString();
message.setText("Sending Message...");
message.setTextColor(Color.BLACK);
v.postDelayed(new Runnable() {
@Override
public void run() {
sendMessage();
}
}, 1);
return handled;
}
});