2010-12-06 3 views
3

Android에서 코드를 계속 실행하고 싶지 않을 때 코드를 실행하는 상황을 처리하는 방법을 알아 내려고 애쓰고 있습니다. onCreate()에서 어떤 작업을 순서대로 수행해야하며 특정 작업이 먼저 수행 될 때까지 코드를 계속 실행할 수 없습니다. 나는 이것이 안드로이드와 자바가 어떻게 행동하는지 이해하고 있으며 내가 필요한 것을 성취 할 수있는 또 다른 방법을 고민하고있다.Android 및 Java에 대한 도움이 필요합니다.

ShowEula는 내 EULA로 간단한 대화 상자를 표시하기 위해 만든 클래스입니다. DBGetOnlineVersionNumber()를 호출하기 전에 사용자가 EULA에 동의하거나 동의하지 않을 때까지 기다려야합니다. 어쩌면 나는 이걸 올바른 방향으로 가지 않을거야. 어쨌든 여기에 내 코드 스 니펫이 있습니다.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.main); 
    String version; 
    ShowEula();  
    version = DBGetOnlineVersionNumber(); 
    .... 

답변

4

당신은 안드로이드에서 사용하는 이벤트 중심 모델에 관해 다시 생각해 봐야합니다.

onCreate가 반환 될 때까지 UI 이벤트를 전달할 수 없기 때문에 onCreate에서 UI 이벤트를 기다릴 수 없습니다.

아마도 소프트웨어 상태 머신으로 구성 할 수 있습니다.

에서 onCreate는 EULA를 보여 EULA_SHOWING

EULA_ACCEPTED에 상태를 발전 당신은 아마 모든 시작시 EULA를 표시하지 않으려는 물론

다음에 뭔가를 표시 할 동의

에 상태를 설정합니다 하지만 설치 후에 만 ​​설정에 저장된 내용으로 처리 할 수 ​​있습니다.

+0

나는 EULA를 처리하기 위해 sharedpreferences를 사용하고 있습니다. 나는 당신이 제안하고있는 것을 생각하고 있었지만 그 모든 것을 분류하는 데 어려움을 겪고있다. 당신은 핸들러 같은 것을 제안하고 있습니까? EULA_SHOWING에 대한 국가를 설정할 수 있습니까? 내가 그걸 어떻게 제안 해 주겠어? –

+0

아니요, 이벤트 중심의 사용자 인터페이스 프로그래밍이라는 전체 개념을 다시 생각해 볼 필요가 있다고 제안합니다.시스템과 사용자가 모두 생성 또는 터치와 같은 이벤트를 보내면 이벤트를받을 때마다 매우 빠르게 작업하고 돌아올 수 있으며 상태 변수를 설정하여 다음에 수행해야 할 이벤트/수행 할 작업을 알 수 있습니다 당신이 그것을 얻은 후에. –

+0

알았어. 매우 유용하고 유용한 정보. Chris에게 감사드립니다. –

3

예, 일반적으로 모든 GUI가 비동기 적으로 작동하는 문제입니다. 나는 당신이 단 2 XML 레이아웃을 만들 수 있다고 생각 내가 일반적으로 공유 우선 부울을 넣고 시작에 두 가지를 작성하면됩니다 ...

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.main); 
    String version; 

    if (Settings.isEulaBeenShown() == false) { 
     /* showEula would call stuffToDoIfUserAgreesToEULA on a positive response was given */ 
     ShowEula(); 
    } 
    else if (Settings.isEULAAgreed() == true) { 
     stuffToDoIfUserAgreesToEULA() 
    } 
    .... 
} 

private void stuffToDoIfUserAgreesToEULA() { 
    String version = DBGetOnlineVersionNumber(); 
} 
+0

좋아, 조금 고자질하고 어떻게되는지 보도록하겠습니다. 이는 의미가 있으며 플래그를 처리하기 위해 공유 환경 설정을 사용한다는 생각을 좋아합니다. –

+0

Andrew 빠른 질문. 면책 조항 : 저는 Android의 초보자입니다 ... Showula는 내가 만든 Eula 클래스에서 stuffToDoIfUserAgreesToEULA를 어떻게 호출할까요? –

+0

앤드류, 도와 줘서 고마워. 나는 지금 그것을 알아 냈다고 생각해. –

0

.

하나는 EULA와 수락/거부 버튼 용이고 다른 하나는 기본 앱용입니다.

앱이로드되면 EULA 레이아웃이 처음이며 공유 환경 설정에서 추적되지 않는 경우에만 EULA 레이아웃을 표시 할 수 있습니다.

사용자가 동의하면 응용 프로그램 내용보기에서 내용보기를 설정합니다.

onCreate()에서 대부분의 내용을 추상화하므로 구성 요소를 다시 사용할 수 있습니다.

private static boolean EulaRequired = true; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);   
    EulaRequired = sharedprefs.getBoolean("firsttime", true); 
    inflateLayout();  
} 

private void inflateLayout() { 
    if (EulaRequired) { 
    this.setContentView(R.layout.eula); 
    } else { 
    this.setContentView(R.layout.application); 
    DBGetOnlineVersionNumber(); 
    } 
} 
private void stuffToDoIfUserAgreesToEULA() { 
    String version = DBGetOnlineVersionNumber(); 
} 
void AcceptClicked(Event e) { 
    EulaRequired = false; 
    inflateLayout(); 
} 

이런 식으로 작동해야합니다. 나는 결코 시도하지 않았습니다.

관련 문제