3

コードの一部に問題がありました。基本的にはカウントダウン プログラムですが、ボタンがクリックされるたびにカウントダウンを更新する必要があります。それが理にかなっていることを願っています。以下は私のコードの一部ですが、意図したとおりに機能していません。

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final TextView mTextField = (TextView) findViewById(R.id.mTextField);
    final Button refresh = (Button) findViewById(R.id.button1);
    final int j = 30000;
    int i = j;
    refresh.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            j = 30000;
        }
    });

     new CountDownTimer(i, 1000) {

         public void onTick(long millisUntilFinished) {
             mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
         }

         public void onFinish() {
             mTextField.setText("done!");
         }
      }.start();
}

私の問題は、onClickListener で変数にアクセスするために変数を final にする必要があることですが、変数が final になると変更できません。

前もって感謝します

4

2 に答える 2

10

jaフィールド変数を作成し、最終的にしないでください。これで問題が解決します

public class MainActivity extends Activity {

   int j;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final TextView mTextField = (TextView) findViewById(R.id.mTextField);
    final Button refresh = (Button) findViewById(R.id.button1);
    j = 3000;
    int i = j;
    refresh.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        j = 30000;
    }
});

 new CountDownTimer(i, 1000) {

     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }

     public void onFinish() {
         mTextField.setText("done!");
     }
  }.start();

}

于 2013-07-09T16:51:36.267 に答える
2

できることはj、メンバー変数を作成するだけで、クラス内のどこでも使用できます

public class MainActivity extends Activity {
    int j = 3000;  // declare it here as a member variable
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final TextView mTextField = (TextView) findViewById(R.id.mTextField);
    final Button refresh = (Button) findViewById(R.id.button1);

この方法では、それを作成する必要はありませんfinal

于 2013-07-09T16:51:31.667 に答える