나는 간단한 취미 게임에 종사하고있는 컴퓨터 애호가입니다. 게임의 난이도를 높이기 위해 카운트 다운 타이머를 추가하고 있습니다.추상화 된 CountDownTimer 클래스가 활동에 링크 된 레이아웃보기 객체를 수정할 수 있습니까?
처음에는 GameActivity 파일에 새 카운트 다운 타이머를 정의하여 onTick 코드를 재정 의하여 각 틱마다 새로운 ImageView 콘텐츠를 스왑합니다. 플레이어가 타이머가 끝날 때까지 기다리는 동안이 작업은 훌륭했습니다. 그러나 타이머가 끝나기 전에 플레이어가 답변을 추측하면 .cancel() 메소드가 전체 앱을 중단시킵니다.
이 문제를 해결하기 위해 CountDownTimer 클래스를 확장하는 새로운 클래스 (GameTimer.java)를 만들었습니다. 그런 다음 GameActivity 파일 내의 적절한 위치에서이 클래스의 인스턴스를 호출합니다. 내 타이머의 ontick 메소드가 단순히 System.out.println으로 시간을 계산할 때 모든 것이 순조롭게 작동합니다. 그러나 레이아웃에서 ImageView에 액세스하려고하면 findViewById()가이 클래스에 정의되어 있지 않음을 알 수 있습니다 (코드가 추가됨).
특정 액티비티에 의해 레이아웃이 비정상적으로 확장되면 외부 클래스가 해당 레이아웃의 항목에 액세스하거나 변경하는 것이 가능합니까? findViewById는 android.app.Activity 클래스의 메서드이며 내 카운트 다운 타이머는 Java Object 만 확장한다는 것을 알고 있습니다.
카운트 다운 타이머에 코드를 추가하고 있지만별로 도움이되지 않을 것으로 생각됩니다. 내 질문에 추상화되어있어 내 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.");
}
}
감사합니다. Vikram. 이것은 내 문제를 해결하고 컨텍스트에 액세스하는 방법을 더 잘 이해하게되었습니다. –