2016-05-18 46 views
0

我想在我的改變startButton的顏色:從內部的onClick(視圖v)開關(v.getId()調用方法

onClick(View v) { 
    switch (v.getId()) { 
    case R.id.startButton: 
    startButton.setTextColor(Color.RED); 

    listenForNoise(); 
    break;} 
} 

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

,但只有當我的方法listenForNoise返回所以有改變。延遲(方法有一個觸發迴路) 如何凸輪我做出改變顏色,在按下按鈕

+0

不做任何長期任務,在你的UI線程(如等待發生的循環)。使用類似AsyncTask的東西 – vilpe89

回答

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 
} 
0

onClick是從main/event/ui線程調用的。你可以從這個線程更新startButton的文本顏色屬性,但是你希望避免做任何工作或者io。

如果listentForNoise方法的代碼也會修改另一個視圖屬性,並且需要在同一個線程中運行,那麼您可以使用可運行的方式發佈。

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