我正在尝试在my:
中更改startButton的颜色onClick(View v) {
switch (v.getId()) {
case R.id.startButton:
startButton.setTextColor(Color.RED);
listenForNoise();
break;}
}
private void listenForNoise(){
/////******
return
但只有当我的方法listenForNoise返回时它才会改变。所以有一个延迟(方法有一个触发循环)。 如何在按下按钮时改变颜色?
答案 0 :(得分:1)
你可以打电话给你的“listenForNoise();”在其他线程内; 这样的事情:
onClick(View v) {
switch (v.getId()) {
case R.id.startButton:
startButton.setTextColor(Color.RED);
new Thread(new Runnable() {
public void run(){
listenForNoise();
}
}).start();
break;}
}
private void listenForNoise(){
/////******
return
}
答案 1 :(得分:0)
onClick是从main / event / ui线程调用的。你可以从这个线程更新startButton的文本颜色属性,但是你想避免做任何工作或者io。
如果listentForNoise方法的代码也修改了另一个视图属性并且需要在同一个线程中运行,那么你可以使用runnable进行发布。
startButton.post(new Runnable() {
@Override
public void run() {
listenForNoise();
}
})
或者创建一个新线程来调用方法
new Thread(new Runnable() {
@Override
public void run() {
listenForNoise();
}
}).start();
或使用AsyncTask(查看Rx java以获取其他方法)
AsyncTask<Void, Void, Void> {
protected Result doInBackground(String... someData) {
// Any non blocking code for listenForNoise should go here
return;
}
protected void onPostExecute(Void result) {
// Any code that updates UI in listenForNoise should go here.
}