2012-08-28 2 views
2

나는 Android 앱에서 작업 중입니다. 내 장치에 XML 파일이 있는지 확인하는 활동이 있습니다. 존재하지 않으면 URL에서 해당 파일을 다운로드하는 것을 포함하여 여러 가지 일을하는 루틴을 호출합니다.startActivityForResult()를 사용하는 코드 플로우

존재한다면, 사용자에게 파일을 다시 다운로드 할 것인지 (건너 뛸 것인지) 묻습니다.

대화 상자를 사용하여 시작했습니다. 내가 본 대화에서 대화 상자는 비동기식이라고 했으므로 Activity를 사용하여 Yes/No를 묻는 메시지를 표시했습니다.

더 읽고 나면 실제 대답은 startActivity()을 사용하여 활동을 시작하면 활동을 비동기 적으로 시작하지만 startActivityForResult()을 사용하면 동 기적으로 (차단) 설정됩니다. 이 진술이 맞습니까?

위의 내용을 전제로하면 사용자가 어떤 단추 (예/아니오)를 선택했는지 알면서도 코드 흐름의 원래 시작점으로 돌아갈 수있는 방법을 모색하고 있습니다.

모든 예제에서이 값을 사용하여 결과를 얻으 려합니다.

protected void onActivityResult(int requestCode, int resultCode,Intent data) { 

} 

내 코드에이 코드를 삽입하는 방법에 어려움을 겪고 있습니다. 필자는 필요한 코드 조각을 보여주는 많은 예제를 본다. 그러나 모두 함께 어떻게 맞는지 명확하지 않다. 내 코드 구조는 다음과 같이 결국 않는다 :이와

public class MainScreen extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    protected void onButtonClick(parameters) { 
     /* Do some work to see if the file exists */ 
     if (!file.exists()) { 
      runComplexRoutine(various_parameters); 

     } else { 
      Intent myIntent = new Intent(getBaseContext(), PromptingActivity.class); 
      myIntent.putExtra("filename", variable_holding_filename); // Just passing a parameter to use in the title of the caled Activity 
      startActivityForResult(myIntent, 1); 
         // Point A 
     } 
    } 


    protected void onActivityResult(int requestCode, int resultCode,Intent data) { 
     if (resultsCode == Activity.RESULT_OK) { 
      runComplexRoutine(various_parameters); 
     } 
     // else, do nothing... 
    } 

} 

내 문제는 내가 주위 various_parameters 많이 통과해야한다는 것입니다. Point A에서 흐름을 재개 할 수 있다면 좋겠지 만 그럴 수는 없습니다. 내가 여기서 맞습니까?

답변

1

startActivityForResult()은 비동기입니다. UI가 변경되고 통화 활동이 일시 중지되므로 (사용자의 onPause() 메소드가 호출 됨) 사용자에게 동기식으로 느껴질 수 있습니다.

그러나 코드를 실행할 수있는 권한은 여전히 ​​있습니다. 결과를 위해 시작한 활동이 완료되면 콜백을 구현하여 대화 상자와 매우 흡사하게 만듭니다.

+0

첫 번째 진술에서 당신이 말하는 것을 봅니다. 두 번째 문장에서는'onActivityResult()'루틴으로 돌아가는 것으로 제한 되었습니까? 아니면 (startActivityForResult()) 직후로 돌아갈 수 있습니까? 필자가 염두에두면, 호출 된 Activity에 전달해야하는 몇 개의 매개 변수가 있으며 호출하는 루틴으로 되돌아갑니다. – Chuck

+0

그리고, 조각을 보여줄 수있는 것보다는 "완전한"예를 들어 주시겠습니까? 감사!!! – Chuck

+0

액티비티가'startActivityForResult()'를 호출하면 코드가 차단되지 않으므로 중단 한 지점으로 돌아갈 방법이 없습니다. 선형 프로그래밍을 생각하고 있다고 생각합니다. 실제로 UI 개발 방식이 아닙니다 ... 이벤트 중심으로 생각해야합니다. 어떤 이벤트 ('onCreate()')로 인해 코드가 실행되었습니다. 다른 이벤트 (예 : 하위 활동의 ​​결과)를 수신하기 전에 이벤트 처리 기능이 완료 될 때까지 실행됩니다. – mah