2016-08-16 1 views
0

私はボタンがクリックされるたびに増加する私のアプリでカウンタを実装しようとしている。私は、カウンタの最終的な価値が何であれ、それを取ってダイアログに表示させたいと思っています。メンバ関数を参照によってメソッドに渡す方法はありますか? [JAVA]

問題は、変数を呼び出すと、onClickメソッドで変更されたものではなく、最初に持っていた値が返されるということです(説明するのは変ですが、私のコードでコメントしています)。私が見ることができる問題のカップルがあります

final TextView points = (TextView) findViewById(R.id.points); 
    points.setText("Points = 0"); 

    class ButtonClick implements View.OnClickListener { 
     int value = 0; 
     public void onClick(View v) { 
      value++; 
      changeLocation(theButton); 
      points.setText("Points = " + value); // This value increases 
     } 

     public int getValue() { 
      return value; 
     } // This returns 0. 
    } 

    final ButtonClick buttonClicked = new ButtonClick(); 
    theButton.setOnClickListener(buttonClicked); 

    final int finalValue = buttonClicked.getValue(); // This still equals zero. 
+0

。 – shmosel

+0

Re、 "//これはまだゼロと等しいです。" _When_それはまだゼロと等しいですか?あなたのプログラムは文字通りいくつかの方法で最後の3行を実行しますか?つまり、新しいButtonClickオブジェクトを作成して登録し、すぐにその値を取得しますか?その場合、もちろんその値はゼロです!ボタンをクリックする時間はユーザーに与えられていません。 –

+0

@ jameslarge私はとても愚かです。あなたのコメントは正しい答えに私を得たものです!あまりに早くgetValue関数を呼び出しました。 (まだJava /最初のアプリの新機能)。 –

答えて

1

:あなたは3行目に当たると

 // define and instantiate button listener 
1) final ButtonClick buttonClicked = new ButtonClick(); 
     // attach listener to button 
2) theButton.setOnClickListener(buttonClicked); 

      <------ here you still didn't executed onClick :) 

     // trying get value 
3) final int finalValue = buttonClicked.getValue(); // This still equals zero. 

値がゼロであるので、あなたは値0を得ています。

クリックして(クリック - >イベントを実行するかどうか)、値を取得してください。表示するには

それが動作するかどうか、あなたは、第二の非同期メソッドの例を必要とする:Javaはポインタを持っていない

new Thread(new Runnable() { 

     @Override 
     public void run() { 

      while(buttonClicked.getValue() ==0) { 
        // you didn't click 

        Thread.sleep(10000); 
      } 
     }; 
}).start(); 
+0

あります。ありがとう! –

0

、 1)のonClickは、オーバーライドされたメソッドではありませんので、このような@Overrideアノテーションを試してください:変数がなければならないとき)

@Override 
public void onClick(View v) { ... } 

2それをクラスレベルでゲッターやセッターと一緒にクラスレベルで宣言しようとします。

これらのヒントが役立つことを願っています。コードはラインによって同期ラインが実行される

関連する問題