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); } }
额外注意事项
- 布局一致性检查:确保
activity_display_florida.xml里包含所有倒计时相关的控件(txtDay、txtHour等),ID要和你之前首页布局里的一致,否则会出现空指针异常。 - Manifest注册确认:检查
AndroidManifest.xml里已经注册了DisplayFloridaActivity,格式如下:
<activity android:name=".DisplayFloridaActivity" />
- 首页跳转逻辑修正:在MainActivity的点击跳转方法里,确保是跳转到
DisplayFloridaActivity,示例代码如下:
public void jumpToCountdown(View view) { Intent intent = new Intent(this, DisplayFloridaActivity.class); startActivity(intent); }
这样修改后,你的第二页面就能正常显示倒计时啦!
内容的提问来源于stack exchange,提问作者Scott Hutton
相关产品推荐
相关产品推荐

