SpotOnView
이라는보기가 있으며 Game_shooting_AB
으로 확장됩니다. 다음과 같이 코딩.android : 귀하의 활동이 실행 중입니까? OnFinish에서 표시 할 수없는 대화 상자
배경 :
SpotOnView에는 카운트 다운 타이머가 있습니다. 시간이 끝나면 게임은 끝났고 대화 상자가 팝업되어 사용자가 종료하거나 다시 재생할 것인지 묻습니다.
SpotOnView 번호 :
public class SpotOnView extends View
{
......
// constructs a new SpotOnView
public SpotOnView(Context context, RelativeLayout parentLayout)
{
super(context);
resources = context.getResources();
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
....
}
public void start_timer()
{
if (!timerHasStarted)
{
countDownTimer.start();
timerHasStarted = true;
}
else
{
countDownTimer.cancel();
timerHasStarted = false;
}
}
public class MyCountDownTimer extends CountDownTimer
{
public MyCountDownTimer(long startTime, long interval)
{
super(startTime, interval);
}
@Override
public void onFinish()
{
text.setText("Time's up!");
((Game_shooting_AB)getContext()).replay_dialog(); //LINE 181
}
@Override
public void onTick(long millisUntilFinished)
{
....
}
}
Game_shooting_AB 번호 :
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.game_shooting);
// create a new SpotOnView and add it to the RelativeLayout
RelativeLayout layout = (RelativeLayout) findViewById(R.id.relativeLayout);
view = new SpotOnView(this, layout); //EXTENDING HERE
layout.addView(view, 0); // add view to the layout
....
}
public void replay_dialog()
{
final Dialog dialog1 = new Dialog(Game_shooting_AB.this, android.R.style.Theme_Translucent_NoTitleBar);
WindowManager.LayoutParams lp = dialog1.getWindow().getAttributes();
lp.dimAmount = 0.7f;
dialog1.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
Window window = dialog1.getWindow();
window.setGravity(Gravity.CENTER);
dialog1.setContentView(R.layout.alert_dialog_replay_shooting);
dialog1.setCancelable(false);
dialog1.show(); //LINE 431
....
로그 캣 :
필요한 줄 번호가 위의 코드에서 주석으로 추가했습니다.
11-22 00:16:34.365: W/dalvikvm(1105): threadid=1: thread exiting with uncaught exception (group=0x41f342a0)
11-22 00:16:34.370: E/AndroidRuntime(1105): FATAL EXCEPTION: main
11-22 00:16:34.370: E/AndroidRuntime(1105): android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running?
11-22 00:16:34.370: E/AndroidRuntime(1105): at android.view.ViewRootImpl.setView(ViewRootImpl.java:708)
11-22 00:16:34.370: E/AndroidRuntime(1105): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:346)
11-22 00:16:34.370: E/AndroidRuntime(1105): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
11-22 00:16:34.370: E/AndroidRuntime(1105): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
11-22 00:16:34.370: E/AndroidRuntime(1105): at android.view.Window$LocalWindowManager.addView(Window.java:554)
11-22 00:16:34.370: E/AndroidRuntime(1105): at android.app.Dialog.show(Dialog.java:277)
11-22 00:16:34.370: E/AndroidRuntime(1105): at com.app.abc.Game_shooting_AB.replay_dialog(Game_shooting_AB.java:431)
11-22 00:16:34.370: E/AndroidRuntime(1105): at com.app.abc.SpotOnView$MyCountDownTimer.onFinish(SpotOnView.java:181)
11-22 00:16:34.370: E/AndroidRuntime(1105): at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:118)
11-22 00:16:34.370: E/AndroidRuntime(1105): at android.os.Handler.dispatchMessage(Handler.java:99)
11-22 00:16:34.370: E/AndroidRuntime(1105): at android.os.Looper.loop(Looper.java:137)
11-22 00:16:34.370: E/AndroidRuntime(1105): at android.app.ActivityThread.main(ActivityThread.java:4898)
11-22 00:16:34.370: E/AndroidRuntime(1105): at java.lang.reflect.Method.invokeNative(Native Method)
11-22 00:16:34.370: E/AndroidRuntime(1105): at java.lang.reflect.Method.invoke(Method.java:511)
11-22 00:16:34.370: E/AndroidRuntime(1105): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
11-22 00:16:34.370: E/AndroidRuntime(1105): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
11-22 00:16:34.370: E/AndroidRuntime(1105): at dalvik.system.NativeStart.main(Native Method)
질문 : 로그 캣은 는 활동을 실행 보여줍니다
?
나는 대화 상자가 보여줄 기초가 있어야한다는 것을 알고있다. 하지만 어떻게 코드를 수정할 수 있습니까?
Game_shooting_AB
코드로 작성하는 대신SpotOnView
에 대화 상자를 코딩하고 표시 할 수 있습니까?MyCountDownTimer 클래스와 replay_dialog 클래스를 Game_shooting_AB로 다시 이동하여 코드를 수정하려고했지만 동일한 오류가 여전히 발생합니다. MyCountDownTimer의 OnFinish가 대화 상자가 표시 할 기본 항목을 찾을 수 없도록 Activity를 완료할지 여부를 묻고 싶습니다.
감사합니다.
신속한 답변을 보내 주셔서 감사합니다! 나는'setGame_shooting_AB'을 부를 곳을 물어보고 싶습니다. 이제 java.lang.NullPointerException이 표시됩니다. – pearmak
SpotOnView 클래스에 setGame_shooting_AB 메소드를 추가해야합니다. SpotOnView의 인스턴스를 가져온 후 매개 변수로 액티비티를 전달하여이 메소드를 호출하십시오. – saiful103a
끔찍하게 죄송합니다. 여전히 위장되어 있습니다 ... 위의 코딩에 대해 자세히 설명해 주시겠습니까? = (계속해서 NPE를 계속 사용하고 있습니다 ... – pearmak