2011-11-08 7 views
1

この質問は、ボタンまたはこのセッターのための制限ではありません。例えば は、ここでは、ボタンのリスナー:Android:メソッドの直後にボタンを無効にする方法setEnabled(false)?

runButton.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       runButton.setEnabled(false); 
       runScript();//This function will take a long time!! 
      } 
     }); 

このボタンをクリックすると、私はそれは直ちに禁止されたいです。しかし、実際には、すべてのメソッドが完了するまで、このボタンが無効になることはありません。つまり、メソッドrunScript()が終了した後、ボタンは実際にはグレーになります。 その行の直後にボタンを無効にする方法を教えてもらえますか?

答えて

0

一般的な経験則として、UIスレッドで時間がかかることは避けたいと考えています。クリックリスナーでできることは、バックグラウンドで長時間実行されるメソッドを実行する新しいスレッドを生成することです。 android AsyncTaskクラスは、バックグラウンドスレッドを持つための多くのサポートメソッドを提供しています。バックグラウンドスレッドは、進行状況イベントを介してUIに更新を返すことができます。

2

どうすればrunScriptメソッドがUIスレッドをブロックしますか?

+0

おかげで更新されます。私がOnClickの中でやりたいことは、サーバーとのトラフィックを生成するrunScript、トラフィックの多くを、私たちのチャネルのパフォーマンスをテストするために使用することです。私はあなたの提案をお試しください。どうもありがとうございます!私はマルチスレッドについてあまり知らない。 – Geeti

0

試してください:あなたはあなたのonClickメソッドの内部でやりたいことはここで見つけるので

runButton.setEnabled(false); 
new Thread(new Runnable() { 
    @Override 
    public void run() { 
      runScript();//This function will take a long time!! 
    } 
}).start(); 

詳しい情報と同様に、別のスレッドでスクリプトを実行し、ボタンを無効にしていますsetEnabled(false)メソッドの直後にrunButton.invalidate()を呼び出す

UIスレッドでは、runynch()メソッドを非同期タスクに転送する必要はありません。ボタンの状態は速く

runButton.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View v) { 
     runButton.setEnabled(false); 
     MyTask asyncTask = new MyTask(); 
     asyncTask.execute(); 
    } 
}); 
private class MyTask extends AsyncTask<void, void, String> { 
protected String doInBackground(void) { 
    runScripts(); 
    //set to something relevant to your app 
    String result =""; 
    return result; 
} 

protected void onPostExecute(String result) { 
    //do something 
} 

}

私は

+0

ありがとう!とても役に立ちます。 – Geeti

関連する問題