2010-05-22 5 views
2

계속 진행하기 전에 다른 스레드가 완료 될 때까지 현재 스레드를 강제로 대기시킬 수 있습니까?메인 스레드를 계속 실행하기 전에 DialogActivity가 반환되기를 기다리는 중

내 프로그램에서 사용자가 AlertDialog에서 MODE을 선택합니다. 게임 플레이에 중요한 구성을 보유하고 있기 때문에 계속하기 전에 프로그램 실행을 중단하고 싶습니다.

 new AlertDialog.Builder(this) 
    .setItems(R.array.game_modes, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      switch (which) { 
      case 0: 
       setMode(TRAINING_MODE); 
      case 1: 
       setMode(QUIZ_MODE); 
      default: 
       setMode(TRAINING_MODE); 
       break; 
      } 

      //continue loading the rest of onCreate(); 
      contineOnCreate(); 
     } 
    }) 
    .create().show(); 

가능한 경우 누구나 해결책을 제시 할 수 있습니까?

+0

정확히 무엇이 문제입니까? 사용자가 무언가를 클릭하는 경우에만 contineOnCreate() 메서드를 호출해야합니다. 그래서 작동하지 않는 것은 무엇입니까? – RoflcoptrException

+0

아니요 - 모드가 선택되기 전에 onStart() 콜백이로드되기 때문에 Alert가 자체 스레드에로드되므로 기본 스레드가 보통 – jax

+0

으로로드를 계속할 수 있으며 이러한 것들은 onStart()에 있어야합니다 이 호출은 contineOnCreate()로 이동합니까? – RoflcoptrException

답변

2

계속 진행하기 전에 현재 스레드 이 다른 스레드가 완료 될 때까지 기다리는 것이 어떻게됩니까?

그렇지 않습니다. 사용자가에 AlertDialog에서 MODE 선택 내 프로그램에서

, 전 모드의 게임 플레이에 중요한 구성을 보유 전에 계속을 프로그램의 실행을 중단 할.

아니요. 사용자가 대화 상자를 닫을 때 메인 애플리케이션 스레드를 빠져 나가기를 원한다면, 사용자가 대화 상자를 다른 방법으로 해제 한 후에 게임 플레이를 시작할 수 있습니다.

그 자체 스레드에서 경고로드 따라서 주요 스레드가 정상

없음으로 로딩을 계속 할 수 있기 때문에

, 그것은하지 않습니다. 모든 UI는 메인 애플리케이션 스레드, 대화 상자에 포함되어 있습니다. 활동 다시 이익이 집중 될 때

은 활동 초점을 잃고 할 필요가 ONSTART() 코드 제어 활동 상태의 일부 때문에 다시 구성 없음.

그런 다음 사용자가 한 가지 방법으로 대화 상자를 닫을 때까지는 아무 것도하지 마십시오.

다른 옵션 : "대화"UI 옵션을 자체 활동으로 옮기고 사용자가 게임 활동 도중에 사용자를 통과하게하십시오.

+0

좋아, 내 접근 방식을 다시 생각해야 할 것처럼 보인다. 추가 번들을 사용하여 모드를 전달하고 기본 화면에서 모드를 표시 할 수 있습니다. – jax

+0

그게 효과가있다. 대화 상자는 너무 많은 화면 공간 (예 : 'DatePicker'대신 'DatePickerDialog'사용)을 많이 차지할 수있는 작업을 처리하기 위해 활동 기본 UI의 확장으로 간주되어야합니다.대화를 주요 탐색 흐름으로 간주해서는 안됩니다 (예 : 작업을 진행하기 전에 대화 상자에서 작업해야 함). – CommonsWare

관련 문제