有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android天文钟:时间格式问题

为什么我的计时表在我告诉它后不停

我发现它似乎与我测试过的平板电脑(7英寸)隔离。我不知道为什么它能在我的手机上工作,但在平板电脑上却不能工作。两种布局中的Chronometer设置相同(因为我对不同的屏幕大小使用不同的布局)

下面是如何在类中处理Chronometer

this.chrono = (Chronometer) findViewById(R.id.calling_crono);

chrono.setOnChronometerTickListener(new OnChronometerTickListener() {

            public void onChronometerTick(Chronometer chronometer) {
                String currentTime= chrono.getText().toString();
            if(currentTime.equals("00:20")) 
            {
              chrono.stop();
              Intent intent = new Intent(QuizActivity.this, ResultActivity.class);
            Bundle b = new Bundle();

            int end = -5;
            b.putInt("score", score);
            b.putInt("end", end);
            intent.putExtras(b); 
            startActivity(intent);
            finish();
             }
            }
        });
        public void startCrono() {
 chrono.setBase(SystemClock.elapsedRealtime());
 chrono.start();
}

以下是如何在正常大小屏幕中进行设置:

<Chronometer
    安卓:id="@+id/calling_crono"
    安卓:layout_height="wrap_content" 
    安卓:layout_width="wrap_content"
    安卓:textColor="#000099" 
    安卓:textStyle="bold"
    安卓:textSize="20sp"/>

在大屏幕上:

 <Chronometer
    安卓:id="@+id/calling_crono"
    安卓:layout_width="wrap_content"
    安卓:layout_height="wrap_content"
    安卓:textSize="50sp"
    安卓:textColor="#000099"
    安卓:textStyle="bold" />

基本问题是,在手机上,它正常工作,即20秒后继续工作,但在平板电脑上,它不会停止并继续工作。这在我的手机(Xperia)上有效,但在平板电脑上无效,有什么原因吗。我唯一能想到的是,它们使用不同的xml布局文件


共 (1) 个答案

  1. # 1 楼答案

    我相信您所经历的与“不同布局的xml文件”无关。这似乎是一个安卓错误,可能是这个:Chronometer in Android 4.2

    检查我是否在普通屏幕大小的手机Android 4.2.2)和三星Galaxy Tab 7Android 4.0.3)上做了几项测试(只有一种布局)。我得到返回值chrono.getText().toString()的以下字符串格式

    1. Android 4.0.3:"mm:ss"
    2. Android 4.2.2:"m:ss"

    对应于报告的错误

    假设你的星系标签7Android 4.2解释了为什么计时器没有停止并继续前进:条件currentTime.equals("00:20")false,因为你比较了两个不同格式的字符串"m:ss""mm:ss"

    如果我的假设是错误的,它不考虑Android版本,但有一个解决方案来处理它

    解决方案:我建议以某种方式格式化currentTime,例如"mm:ss",然后将格式化时间与"00:20"进行比较。以下代码段使用SimpleDateFormat

    chrono.setOnChronometerTickListener(new OnChronometerTickListener() {
    
            public void onChronometerTick(Chronometer chronometer) {
    
                String currentTime= chrono.getText().toString();
                Date date = null;
                try {
                    date = new SimpleDateFormat("mm:ss").parse(currentTime);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                String newTime = new SimpleDateFormat("mm:ss").format(date);
                ...
    

    现在使用newTime进行比较:

    if(newTime.equals("00:20")) {
        // your code
    }