You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android多页面倒计时异常:第二页面倒计时不显示问题求助

问题分析与解决方案

嘿,我看完你的代码瞬间就找到问题根源了——你把倒计时的核心逻辑塞进了一个完全多余的内部Activity类里,而真正要显示的DisplayFloridaActivity根本没执行这些倒计时相关的代码!咱们一步步来修复:

核心问题点

  • 你在DisplayFloridaActivity里嵌套了DisplayFloridactivity内部类,但这个内部类从来没被触发调用,而且它还错误地加载了activity_main的布局,不是第二页面的专属布局。
  • 外部的DisplayFloridaActivity的onCreate方法只做了最基础的布局加载,完全没初始化倒计时控件、启动倒计时逻辑。
  • Florida方法是在DisplayFloridaActivity内部跳转到自身,这显然不符合你“从首页跳转到第二页”的需求。

修正后的完整代码

把内部类的逻辑移到外部类中,同时确保加载的是第二页面的布局,修改后的DisplayFloridaActivity.java如下:

package com.example.countdown;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DisplayFloridaActivity extends AppCompatActivity {
    private TextView txtDay, txtHour, txtMinute, txtSecond;
    private TextView tvEventStart;
    private Handler handler;
    private Runnable runnable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 加载第二页面的专属布局,不要用首页的activity_main!
        setContentView(R.layout.activity_display_florida);
        
        // 初始化倒计时相关控件,确保这些控件ID在activity_display_florida布局里存在
        txtDay = findViewById(R.id.txtDay);
        txtHour = findViewById(R.id.txtHour);
        txtMinute = findViewById(R.id.txtMinute);
        txtSecond = findViewById(R.id.txtSecond);
        tvEventStart = findViewById(R.id.tveventStart);
        
        // 启动倒计时逻辑
        countDownStart();
    }

    public void countDownStart() {
        handler = new Handler();
        runnable = new Runnable() {
            @Override
            public void run() {
                handler.postDelayed(this, 1000);
                try {
                    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
                    Date futureDate = dateFormat.parse("31-8-2020");
                    Date currentDate = new Date();
                    if (!currentDate.after(futureDate)) {
                        long diff = futureDate.getTime() - currentDate.getTime();
                        long days = diff / (24 * 60 * 60 * 1000);
                        diff -= days * (24 * 60 * 60 * 1000);
                        long hours = diff / (60 * 60 * 1000);
                        diff -= hours * (60 * 60 * 1000);
                        long minutes = diff / (60 * 1000);
                        diff -= minutes * (60 * 1000);
                        long seconds = diff / 1000;
                        txtDay.setText("" + String.format("%02d", days));
                        txtHour.setText("" + String.format("%02d", hours));
                        txtMinute.setText("" + String.format("%02d", minutes));
                        txtSecond.setText("" + String.format("%02d", seconds));
                    } else {
                        tvEventStart.setVisibility(View.VISIBLE);
                        tvEventStart.setText("Holiday is over, get a new one booked ASAP!");
                        textViewGone();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
        handler.postDelayed(runnable, 1 * 1000);
    }

    public void textViewGone() {
        // 确保这些布局/控件ID在activity_display_florida里存在,否则会触发空指针异常
        findViewById(R.id.LinearLayout1).setVisibility(View.GONE);
        findViewById(R.id.LinearLayout2).setVisibility(View.GONE);
        findViewById(R.id.LinearLayout3).setVisibility(View.GONE);
        findViewById(R.id.LinearLayout4).setVisibility(View.GONE);
        findViewById(R.id.textViewheader1).setVisibility(View.GONE);
        findViewById(R.id.textViewheader2).setVisibility(View.GONE);
    }
}

额外注意事项

  1. 布局一致性检查:确保activity_display_florida.xml里包含所有倒计时相关的控件(txtDay、txtHour等),ID要和你之前首页布局里的一致,否则会出现空指针异常。
  2. Manifest注册确认:检查AndroidManifest.xml里已经注册了DisplayFloridaActivity,格式如下:
<activity android:name=".DisplayFloridaActivity" />
  1. 首页跳转逻辑修正:在MainActivity的点击跳转方法里,确保是跳转到DisplayFloridaActivity,示例代码如下:
public void jumpToCountdown(View view) {
    Intent intent = new Intent(this, DisplayFloridaActivity.class);
    startActivity(intent);
}

这样修改后,你的第二页面就能正常显示倒计时啦!

内容的提问来源于stack exchange,提问作者Scott Hutton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:54:19