【问题标题】:Starting a new activity when a countdown timer hits 0当倒计时为 0 时开始一个新的活动
【发布时间】:2019-11-20 18:53:15
【问题描述】:

我正在制作一个简单的倒数计时器应用程序,但无法启动新活动。在onFinish() 方法上,我让它调用另一个方法resetActivity(),它会创建一个新的Intent,如下所示:

public void resetActivity() {
    Intent intent = new Intent(MainActivity.this, reset.class);
    startActivity(intent);
}

当我的计时器为 0 时,它并没有开始新的活动,而是崩溃了。

我觉得这与View 有关,但我没有在网上找到任何对我有帮助的东西。我遇到的大多数页面都使用按钮来启动新活动 我有这个新活动的原因只是改变到一个新的背景,一个新的消息和一个重置按钮重新开始。如果有办法在计时器达到 0 时更改背景,我将不需要第二个活动。

这是我的倒计时块:

public void start() {
    countdowntimer = new CountDownTimer(timeLeft, 1000) {
        @Override
        public void onTick(long x) {
            timeLeft = x;
            updateTimer();
        }

        @Override
        public void onFinish() {
            resetActivity();
        }
    }.start();
}

【问题讨论】:

  • 您的reset 活动是否已在清单中注册? “改变背景”是什么意思(改变颜色?)
  • 是的,我可以在清单中看到 。我所说的更改背景的意思是将新图像设置为新背景。
  • 两个注意事项:1)你应该添加你的崩溃日志。 2)您的问题似乎是如何设置不同的背景颜色等,而不是如何开始新活动。
  • 它不是新的背景颜色,而是图像。我有一个新活动的原因是,用户不仅可以看到一个新的背景,而且还有一个按钮可以按下来基本上重置整个应用程序。主 Activity 上的背景图像显示的是一整杯啤酒,而背景 Activity 显示的是一个空玻璃杯,不确定这是否相关。

标签: java android android-studio android-intent


【解决方案1】:

更改托管活动背景的一种方法是将ImageView 添加到活动布局中:

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="true"/>

有了这样的设置,您可以在计时器的 onFinish 中执行 imageView.setImageResource(R.drawable.myAwesomeDrawable)(并像这样调用计时器,例如 new CountDownTimer(5000, 1000))。不过,我不确定您在 onTick 中的逻辑。

您当然可以像您提到的那样转换到新的活动,而不是将图像设置为 ImageView。假设活动如您所说在清单中注册,它将正常工作。

如果上述方法没有帮助,则需要您的 logcat。

【讨论】:

  • imageView 会覆盖任何 android studio 文本或按钮吗?我如何确保图像实际上设置在工作室显示的任何文本或按钮后面? logcat 显示此异常:java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.shotclock/com.example.shotclock.reset}:android.view.InflateException:com.example.shotclock 中的二进制 XML 文件第 2 行:layout/activity_reset: com.example.shotclock:layout/activity_reset 中的二进制 XML 文件第 2 行: 膨胀类 RelativeLayoutLayout 时出错
  • 您的布局中有错字:RelativeLayoutLayout。必须是相对布局
  • 对于您的说明的第二部分,您可以使用 ConstraintLayout 或 RelativeLayout(更简单),将 ImageView 放在布局的第一个子级,然后打包其余部分 - 它们将显示在顶部。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多