Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 希望创建一个通用变量(我希望这是正确的术语)_Java_Android_Variables - Fatal编程技术网

Java 希望创建一个通用变量(我希望这是正确的术语)

Java 希望创建一个通用变量(我希望这是正确的术语),java,android,variables,Java,Android,Variables,我希望作出一些改变,这样我就不必重复我的代码(有意义) 以下是我目前的情况: package com.rcd.learningactivities; import java.text.DecimalFormat; import java.util.concurrent.TimeUnit; import android.app.Activity; import android.os.Bundle; import android.os.CountDownTimer; import android

我希望作出一些改变,这样我就不必重复我的代码(有意义)

以下是我目前的情况:

package com.rcd.learningactivities;

import java.text.DecimalFormat;
import java.util.concurrent.TimeUnit;

import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        final TextView blueTimer = (TextView) findViewById(R.id.blueTimer);  
        Button blue = (Button) findViewById(R.id.button1);

        final TextView redTimer = (TextView) findViewById(R.id.redTimer);  
        Button red = (Button) findViewById(R.id.button2);



        final CountDownTimer cd = new CountDownTimer(300000, 1000) {

             public void onTick(long millisUntilFinished) {
                    DecimalFormat dfmin = new DecimalFormat("0");
                    DecimalFormat dfsec = new DecimalFormat("00");
                    double seconds = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)%60;
                    double min = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished);
                    blueTimer.setText(String.valueOf(dfmin.format(min)) + ":" + String.valueOf(dfsec.format(seconds)));

             }

             public void onFinish() {
                 blueTimer.setText("5:00");
             }
          };

        blue.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (blueTimer.getText().toString().contains("5:00")){
                    cd.start();

                } else {
                    cd.cancel();
                    cd.onFinish();
                }

            }
        });

        red.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (redTimer.getText().toString().contains("5:00")){
                    cd.start();
                } else {
                    cd.cancel();
                    cd.onFinish();
                }

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}
我希望blue.setOnClickListener和red.setOnClickListener都能够利用我的cd倒计时,但是我需要blueTimer.setText(字符串…)能够根据用户单击的按钮更改为redTimer.setText(字符串…)

我真的希望这是有意义的,如果我想这个倒退,请让我知道


基本上,我想在上面的onTick方法中创建blueTimer,变量x。

重点是使用类字段或属性:

    public class MainActivity extends Activity {
    protected CountDownTimer cd;
    private Button lastPressedButton;
    private Button red;
    private Button blue;
    private TextView blueTimer;
    private TextView redTimer;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);


            blueTimer = (TextView) findViewById(R.id.blueTimer);  
            blue = (Button) findViewById(R.id.button1);

            redTimer = (TextView) findViewById(R.id.redTimer);  
            red = (Button) findViewById(R.id.button2);



            cd = new CountDownTimer(300000, 1000) {

                 public void onTick(long millisUntilFinished) {
                        DecimalFormat dfmin = new DecimalFormat("0");
                        DecimalFormat dfsec = new DecimalFormat("00");
                        double seconds = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)%60;
                        double min = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished);
if (lastPressedButton == red){
                 redTimer.setText(String.valueOf(dfmin.format(min)) + ":" + String.valueOf(dfsec.format(seconds)));
}
else if (lastPressedButton == blue){
                 blueTimer.setText(String.valueOf(dfmin.format(min)) + ":" + String.valueOf(dfsec.format(seconds)));
}


                 }

                 public void onFinish() {
    if (lastPressedButton == red)
                     blueTimer.setText("5:00");
    else if (lastPressedButton == blue){
    //something else?
    }
                 }
              };

            blue.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
    lastPressedButton = blue;
                    if (blueTimer.getText().toString().contains("5:00")){
                        cd.start();

                    } else {
                        cd.cancel();
                        cd.onFinish();
                    }

                }
            });

            red.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
    lastPressedButton = red;
                    if (redTimer.getText().toString().contains("5:00")){
                        cd.start();
                    } else {
                        cd.cancel();
                        cd.onFinish();
                    }

                }
            });
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }

    }

最简单的答案是设置要在计时器中更新的
TextView
,然后启动计时器。这需要您使用自己的类扩展
倒计时程序

public class MyCountDownTimer extends CountDownTimer {

    private TextView viewToUpdate; 

    public void onTick(long millisUntilFinished) {
        DecimalFormat dfmin = new DecimalFormat("0");
        DecimalFormat dfsec = new DecimalFormat("00");
        double seconds = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)%60;
        double min = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished);

        // Make sure a view has been set
        if (viewToUpdate != null) {
            viewToUpdate.setText(String.valueOf(dfmin.format(min)) + ":" + 
                                 String.valueOf(dfsec.format(seconds)));
        }   
     }

     public void onFinish() {
         if (viewToUpdate != null) {
             viewToUpdate.setText("5:00");
         }
     }

     public void setViewToUpdate(TextView v)
     {
         viewToUpdate = v;
     }
}

现在,您可以使用它来代替倒计时,在单击侦听器中,您可以在调用
start()

之前调用
setViewToUpdate()
,我的答案引发异常,您是对的。我删除了我的答案,因为你的答案更能说明问题。除了。。。这与他问的问题无关。谢谢你,这个答案对我来说很有意义,我现在已经开始工作了!这是很可能有更好的答案,但因为我仍然是非常新的,这是最容易理解的!谢谢
public class MyCountDownTimer extends CountDownTimer {

    private TextView viewToUpdate; 

    public void onTick(long millisUntilFinished) {
        DecimalFormat dfmin = new DecimalFormat("0");
        DecimalFormat dfsec = new DecimalFormat("00");
        double seconds = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)%60;
        double min = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished);

        // Make sure a view has been set
        if (viewToUpdate != null) {
            viewToUpdate.setText(String.valueOf(dfmin.format(min)) + ":" + 
                                 String.valueOf(dfsec.format(seconds)));
        }   
     }

     public void onFinish() {
         if (viewToUpdate != null) {
             viewToUpdate.setText("5:00");
         }
     }

     public void setViewToUpdate(TextView v)
     {
         viewToUpdate = v;
     }
}