[英]Calling method from within onClick(View v) switch (v.getId()
我正在尝试在我的内部更改startButton的颜色:
onClick(View v) {
switch (v.getId()) {
case R.id.startButton:
startButton.setTextColor(Color.RED);
listenForNoise();
break;}
}
private void listenForNoise(){
/////******
return
但是只有当我的方法listenForNoise返回时,它才会改变。 因此存在延迟(方法具有触发循环)。 我如何在按下按钮时改变颜色?
您可以调用“ 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
}
onClick是从main / event / ui线程调用的。 您可以从该线程更新startButton的text color属性,但是可以避免进行任何工作或io。
如果listentForNoise方法的代码也修改了另一个view属性,并且需要在同一线程中运行,则可以使用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.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.