我是一个电脑爱好者,正在做一个简单的琐事游戏。为了增加游戏的难度,我添加了一个倒计时。
最初,我在我的 GameActivity 文件中定义了一个新的倒计时计时器,覆盖了 onTick 代码,因此它会在每次滴答时交换新的 ImageView 内容。只要玩家等待计时器结束,这一切都很好。但是,如果玩家在计时器结束之前猜到了答案,.cancel() 方法会导致整个应用程序崩溃。
为了解决这个问题,我创建了一个扩展 CountDownTimer 类的新类 (GameTimer.java)。然后,我从我的 GameActivity 文件中的适当位置调用此类的一个实例。当我的计时器的 ontick 方法只是使用 System.out.println 倒计时时,一切都会顺利进行。但是,当我尝试访问布局上的 ImageView 时,我可以看到 findViewById() 没有为此类定义(附加代码)。
一旦布局被某个活动膨胀,外部类是否可以访问/更改该布局上的项目?我知道 findViewById 是 android.app.Activity 类的一个方法,而我的倒数计时器只是扩展了 Java 对象。
我正在为我的倒数计时器附加代码,但我怀疑它没有多大帮助。我希望我的问题足够抽象,以至于我不需要发布我的 gameActivity 代码。如果该代码有帮助,我会在将其发布到此处之前尝试对其进行清理。
package edu.trinity.madvertising;
import android.os.CountDownTimer;
import android.widget.ImageView;
public class TrinityGameTimer extends CountDownTimer {
private ImageView myTimerVisual;
public TrinityGameTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
System.out.println("Timer has been started.");
}
@Override
public void onFinish() {
System.out.println("Timer has been stopped.");
}
@Override
public void onTick(long arg0) {
// The problem is here. I cannot findViewById
ImageView myTimerVisual = (ImageView)findViewById(R.id.imageview_game_timer);
myTimerVisual.setImageResource(R.drawable.timerbar5);
System.out.println("Tick. Tick.");
}
}