从onClick(View v)开关中调用方法(v.getId()

时间:2016-05-18 16:01:57

标签: java android methods switch-statement

我正在尝试在my:

中更改startButton的颜色
onClick(View v) {
  switch (v.getId()) {
    case R.id.startButton:
    startButton.setTextColor(Color.RED);

    listenForNoise();
  break;}
}

private void listenForNoise(){
  /////******
return

但只有当我的方法listenForNoise返回时它才会改变。所以有一个延迟(方法有一个触发循环)。 如何在按下按钮时改变颜色?

2 个答案:

答案 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.
  }