私は単純な雑学ゲームに取り組んでいるコンピューター愛好家です。ゲームの難易度を上げるために、カウントダウン タイマーを追加しています。
最初に、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.");
}
}