【问题标题】:cancel method doesn't work in Count Down Timer class?取消方法在倒数计时器类中不起作用?
【发布时间】:2016-09-03 04:32:05
【问题描述】:

我设计了一个有两个按钮的应用程序,一个用于启动计数器,另一个用于停止。启动计数器工作正常,但当我单击停止按钮时,应用程序崩溃。
我的代码有什么问题?

public class MainActivity extends AppCompatActivity {
    int i=1;
    TextView txt;
    Counter ct;

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

    public void bustart(View view) {
        startTime();
    }

    public void buop(View view) {
        ct.cancel();
    }

    public void startTime(){
        i=1;
        txt=(TextView)findViewById(R.id.textView);
        ct=new Counter(5000,1000);
        ct.start();
    }

    public  class Counter extends CountDownTimer{

        Counter(long millisInFuture,long countDownInterval){
            super(millisInFuture,countDownInterval);
        }

        public void onTick(long millisUntilFinished) {
            txt.setText(String.valueOf(i));
            i++;
        }

        public void onFinish() {
            txt.setText("Done");
        }
    }
}

【问题讨论】:

  • 发布堆栈跟踪
  • 您的按钮在哪里声明和初始化?
  • 你在哪里调用buop方法?

标签: android methods counter


【解决方案1】:

确保您将buop onClick 提供给您的 Xml。,, 像这样

<Button
    android:id="@+id/btn1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
 android:onClick="buop"
    android:layout_centerInParent="true"
    android:padding="20dp"
    android:text="Cancel"
    android:visibility="visible"

    />

<Button
    android:id="@+id/btn2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="bustart"
    android:layout_centerInParent="true"
    android:padding="20dp"
    android:text="Start"
    android:visibility="visible"
    android:layout_below="@+id/btn1"

    />

如果您取消按钮而不启动,则使用布尔值确保计时器启动,否则会导致崩溃。否则你的代码很好......

boolean timerStart=false;


public void bustart(View view) {
    if(!timerStart) {

      timerStart=true;
        startTime();
    }
 }


 public void buop(View view) {

    if(timerStart) {
        timerStart=false;
        ct.cancel();
    }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    相关资源
    最近更新 更多