Android 倒计时问题(未正确倒计时)

Android 倒计时问题(未正确倒计时),android,timer,Android,Timer,我的倒计时有问题。Im基本上有一个微调器,其中有设定值。以下是微调器的代码: tSpin1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { if(i =

我的倒计时有问题。Im基本上有一个微调器,其中有设定值。以下是微调器的代码:

tSpin1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {


            if(i == 0){
                timeInms1 = 8400000;
            }
           if (i == 1){
                timeInms1 = 13200000;
            }
           if (i == 2){
                timeInms1 = 18000000;
            }
            if(i == 3){
                timeInms1 = 22800000;
            }
            if(i == 4){
                timeInms1 = 27600000;
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });
问题是,我认为'timeInms1'变量由于某种原因从未获得值。计时器直接转到onFinish方法。我将一些随机测试语句放入微调器的“if”括号中,以确保它正常运行(例如在textView中更改文本),并且它按预期运行,括号中的内容正确执行。我还尝试用一个随机值(比如30000)初始化timeInms1,它运行,但没有改变,它只运行计时器30秒。让我困惑的是,当我将setText这样的代码放在“微调器”的括号中时,它会执行,但当我更改“TimeInms1”的值时,它就不起作用了


提前感谢您的帮助

MainActivity.java应该是这样的

public class MainActivity extends Activity {
CountDownTimer lumbyTree;
    Textview tTimer1;
int timeInms1;

private void createCountDownTimer() {
    lumbyTree = new CountDownTimer(timeInms1,1000) {

        @Override
    public void onTick(long lumbyTreeTimeToGo) {
        int mins = (int)lumbyTreeTimeToGo/60000;
        int seconds = (int)(lumbyTreeTimeToGo-(mins*60000))/1000;
        tTimer1.setText(mins +":" +seconds);
    }

        @Override
    public void onFinish() {
        tTimer1.setText("00:09");
    }
    };

}
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button tStart1=(Button)findViewById(R.id.button1);
    tStart1.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            createCountDownTimer();
            lumbyTree.start();

        }
    });
    Spinner tSpin1 = (Spinner)findViewById(R.id.spinner1);
    tSpin1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {


        if(i == 0){
            timeInms1 = 8400000;
        }
       if (i == 1){
            timeInms1 = 13200000;
        }
       if (i == 2){
            timeInms1 = 18000000;
        }
        if(i == 3){
            timeInms1 = 22800000;
        }
        if(i == 4){
            timeInms1 = 27600000;
        }
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
});
}
公共类MainActivity扩展活动{
倒数计时树;
文本视图tTimer1;
int timeInms1;
私有void createCountDownTimer(){
lumbyTree=新的倒计时(timeinms11000){
@凌驾
公共无效onTick(长lumbyTreeTimeToGo){
国际分钟=(国际)lumbyTreeTimeToGo/60000;
整数秒=(整数)(lumbyTreeTimeToGo-(分钟*60000))/1000;
tTimer1.setText(分钟+“:”+秒);
}
@凌驾
公共无效onFinish(){
tTimer1.setText(“00:09”);
}
};
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
按钮tStart1=(按钮)findViewById(R.id.button1);
tStart1.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
createCountDownTimer();
lumbyTree.start();
}
});
微调器tSpin1=(微调器)findViewById(R.id.spinner1);
tSpin1.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView AdapterView、View视图、int i、long l){
如果(i==0){
timeInms1=8400000;
}
如果(i==1){
timeInms1=13200000;
}
如果(i==2){
timeInms1=18000000;
}
如果(i==3){
timeInms1=22800000;
}
如果(i==4){
timeInms1=27600000;
}
}
@凌驾
未选择公共无效(AdapterView AdapterView){
}
});
}

要在选择微调器后立即启动计时器吗?不,我有一个运行.start()的按钮命令。按钮标记为tStart1。这是列出的最后一个方法。我已经测试过它,它可以工作,当我按下它时,它会转到onFinish方法。刚刚尝试过这个方法,我的项目中的几乎所有内容现在都用红色下划线标出。所有显示“class”或“interface”的错误都是lumbyTree类变量,还是在某些函数中声明的n?使其成为类变量(即在任何函数外声明)。在声明lumbyTree时也删除final。lumbyTree是在MainActivity.java下声明的。我删除了final,并收到以下错误消息:变量“lumbyTree”是从内部类中访问的,需要设置为finalYou仅在声明ie时才会收到该错误。final CountDownTimer lumbyTree=新的CountDownTimer(TimeInMs11000)我猜某个函数中的这一行是oncreate。它应该是公共类main活动扩展活动{CountDownTimer lumbyTree;像这样,你是说我需要创建一个全新的类文件来承载这个计时器?(顺便说一句,这是活动中的5个计时器之一)不过你说得对,我确实是在MainActivity下申报的。谢谢你的支持,我对这个有点陌生:P
public class MainActivity extends Activity {
CountDownTimer lumbyTree;
    Textview tTimer1;
int timeInms1;

private void createCountDownTimer() {
    lumbyTree = new CountDownTimer(timeInms1,1000) {

        @Override
    public void onTick(long lumbyTreeTimeToGo) {
        int mins = (int)lumbyTreeTimeToGo/60000;
        int seconds = (int)(lumbyTreeTimeToGo-(mins*60000))/1000;
        tTimer1.setText(mins +":" +seconds);
    }

        @Override
    public void onFinish() {
        tTimer1.setText("00:09");
    }
    };

}
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button tStart1=(Button)findViewById(R.id.button1);
    tStart1.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            createCountDownTimer();
            lumbyTree.start();

        }
    });
    Spinner tSpin1 = (Spinner)findViewById(R.id.spinner1);
    tSpin1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {


        if(i == 0){
            timeInms1 = 8400000;
        }
       if (i == 1){
            timeInms1 = 13200000;
        }
       if (i == 2){
            timeInms1 = 18000000;
        }
        if(i == 3){
            timeInms1 = 22800000;
        }
        if(i == 4){
            timeInms1 = 27600000;
        }
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
});
}