2016-05-18 3 views
0

)メソッドの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は、メイン/イベント/ UIスレッドから呼び出されます。 startButtonのtext colorプロパティをこのスレッドから更新しても問題ありませんが、作業や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. 
    } 
関連する問題