2016-09-08 4 views
0

라고 onActivityResult를 내가 응용 프로그램의 폴더 선택기 부분에 다음과 같은 활동 순서가 있습니다한 번만

활동 시작 B합니다. 은 사용자가 폴더 트리에 더 깊이 들어갈 때 스택되는 인스턴스를 시작합니다. B의 인스턴스 (폴더를 선택 함)가 완료 될 때마다 그 필드와 모든 앞에 B이 완료되고 이 다시 표시되고 전파 된 결과가 표시되어야합니다. 사용자가 역 추적하면 앞의 B이 완료되지 않아야합니다. 사용자는 폴더 하위 트리간에 앞뒤로 이동할 수 있어야합니다.

나는 모두 에서 B에 다음 B의 새 예를 들어,에 startActivityForResult를 사용하여 이러한 목표를 달성하기 위해 노력하고있어. 사용자가 인스턴스 B을 완료하면 setResult를 사용하고 이전 인스턴스의 onActivityResult 메소드에서이를 확인하려고합니다. 결과가 RESULT_OK 인 경우 결과를 다시 설정하고 모든 인스턴스가 계단식 시퀀스로 완료되고 A이 다시 표시 될 때까지 결과를 다시 표시합니다. 시퀀스만큼 I은 이동으로 작동

= "B (1) ="B (2) = "B (3) 마침 상기 B에 되돌아없이 부 .

단, I는 = "B (1) ="B (2) => 다시 B 에 가면 (1) = "B (3) 및 마무리하여 onActivityResult B (1) B (2)에서 처음으로 돌아올 때 B (3)에서 끝낼 때만 나중에 다시 돌아올 때 B (1)으로 호출됩니다. B (1)B (3)에서이 순서로 돌아갈 때 간단히 다시 시작됩니다. 계단식 마무리 시퀀스가 ​​끊어집니다.

왜 onActivityResult는 한 번만 호출 되는가 B (1)? 어린이 활동이 결과를 설정하고 마칠 때마다 호출되어서는 안됩니까?

: 최종 B 결과를 받기

Intent intent = new Intent(ActivityA.this, ActivityB.class); 
startActivityForResult(intent, RequestCodes.ActivityB); 

:

=== 활동 : : 첫 번째 B 인스턴스를 시작

여기

는 일부 코드입니다
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(resultCode == RESULT_OK){ 
    ... 
    } 
} 

=== 활동 B :

자체에서 새 자식에게 B 시작 :

Intent intent = new Intent(ActivityB.this, ActivityB.class); 
startActivityForResult(intent, RequestCodes.ActivityB); 

결과를 설정 폴더를 선택할 때 : 아이 받기

Intent result = new Intent(); 
result.putExtra(...); 
setResult(Activity.RESULT_OK, result); 
finish(); 

을 B 각 학부모의 결과 B (단 B (1) 어떤 이유에서 처음이라고 함) 예 : 미리

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(resultCode == RESULT_OK){ 
    setResult(Activity.RESULT_OK, data); 
    finish(); 
    } 
} 

감사합니다.

+0

마지막 방법으로 대신'setResult (..., data)'를 입력해야합니다. 오타 또는 버그입니까? –

+0

이것은 오타입니다. 예, 코드의 데이터입니다. 감사. – Johe

답변

1

이것은 끔찍한 아키텍처입니다! 트리를 탐색 할 때 B의 여러 인스턴스를 작성하지 않아야합니다. 결국 당신은 추리하게 될 것입니다! Activity의 단일 인스턴스를 사용해야하며 사용자가 트리에서 위 또는 아래로 이동할 때 Activity에 표시되는 데이터 만 변경하면됩니다. 트리를 설명하는 내부 데이터 모델이 있어야하며 트리에서 현재 표시중인 노드 만 기억하면됩니다. BACK (뒤로) 버튼을 사용하여 돌아가는 사용자를 지원하려는 경우 스택의 노드를 결정하는 데 사용할 수있는 자체 스택 (활동 스택이 아닌 스택의 트리 노드 참조 스택)을 만들 수 있습니다. 트리를 사용하여 현재 노드에서 다시 이동합니다. 이것은 간단한 데이터 관리 문제이며 아키텍처에서이 문제가 View 관리 문제가되도록했습니다.

+0

답장을 보내 주셔서 감사합니다. 최종 앱에서 다른 아키텍처를 선택하겠습니다. onActivityResult가 시퀀스에서 한 번만 호출되는 이유를 알고 싶습니다. – Johe