2012-01-23 4 views
0

私は宿題プロジェクトに取り組んでいます。私は、テキストフィールドと4つのボタン(計算、リセット、約終了、終了)の少ない簡単なアプリケーションを作成しました。この目的のために、スレッド「計算」を開始しました。アイデアは、ユーザが指定したテキストfiledsにいくつかの値にフィードされ、プレスは、計算した結果は、私はメインクラスで全体の計算を実行する他のfields.Andに表示され、ここに私のコード - のセクションですメインクラスのアンドロイドボタンにランナブルを割り当てる方法は?

public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.about_button: 
     Intent i = new Intent(this, About.class); 
     startActivity(i); 
     break; 
     // More buttons go here (if any) ... 
     case R.id.exit_button: 
     finish(); 
     break; 
     case R.id.reset_button: 
      clearAllFields(); 
      break; 
     case R.id.calculate_button: 
      startCalculation(); 
      break;}} 
void startCalculation() { 
    calculation = new Thread(this); 
    calculation.start();} 

しかし、私は実行し、計算を押すと、アプリの力が閉じます。 ご協力いただければ幸いです。事前

+0

なぜ 'this'を' Thread'のコンストラクタに入れていますか?アプリがクラッシュしたときにスタックトレースを調べる必要があります。これは、アプリがクラッシュした場所(理由)を手がかりにするためです。 – Graeme

+0

@Marvin Pinto - 私はrunnableのみを使用することができます。 – user1149621

+0

@Graemeこれをコンストラクタから削除しました。アプリが実行され、クラッシュしませんでしたが、どちらも計算されませんでした。 – user1149621

答えて

0

のおかげで、私は常にそれを行うこの方法:

 

this.hiButton = (Button)this.findViewById(R.id.HI); 
    this.hiButton.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     sayHalloYouWonderfulWorldOfAndroid(); 
    } 
    }); 
+0

そして、通常、遅延パターン – sherif

0
void startCalculation() { 
calculation = new Thread(this);* 
calculation.start();} 
  • コードのこの作品は、引数thisで新しいスレッドを作成します。ドキュメントhereからわかるように、start()に電話すると、コンストラクタに入力した引数のrun()メソッドが呼び出されます。あなたは、スレッドが実際にその後、すべての作業を行いたい場合は、thisで上書きrun()方法...

を持っていない限り、あなたは匿名クラスを作成し、それを引数なしのコンストラクタを与え、runメソッドをオーバーライドする必要があります。あなたはそうのように、この操作を行います。

Thread calculation = new Thread() { 
    @Override 
    public void run() { 
    // Do calculation here 
} 

あなたがHandlerを使用する必要があり、あなたのページに表示するための答えを得るために。しかし、あなたはそれを自分自身で見ることができます:)

関連する問題