2012-01-09 2 views
3

일부 시각적 조각을 구현하는 클래스가 있습니다. (나는 ApetWidgets이라고 부른다.) 그들은 그들 자신의 클래스 계층 구조를 가지고있다.활동 시작 및 활동이없는 descendent 클래스의 결과 캡처

public class SignatureApetWidget extends AbstractApetWidget { 

    private void startCapture(ApetActivity act) { 
     Intent intent = new Intent(act, SignatureCaptureActivity.class); 
     intent.putExtra(...); 

     act.startActivityForResult(intent, CAPTURE_SIGNATURE_REQUEST); 
    } 

그 중 하나는 다른 활동을 시작하고 결과를 기다려야합니다. 그러나 위젯을 포함하는 액티비티에 대한 참조가 있지만 parentActivity의 startActivityForResult를 호출 할 수는 있지만 부모 액티비티로 이동하기 때문에 결과를 가로 채지 못했습니다.

결과를 캐치하여 위젯에 다시 위임 할 수는 있지만, 위젯의 특정 로직을 위젯에서 활동으로 옮겨야하기 때문에 좋지 않은 것처럼 보입니다. 위젯을 사용할 계획 인 모든 활동 클래스에서이 위임을 구현해야합니다.

다른 활동을 시작하는 방법을 아는 방법은 적어도 (적어도 내가 아는 방법). (그것은 잘 작동합니다.) 그러나, 나는 그것에 대한 결과가 없습니다. 활동 또는 다른 클래스에서 확장 및 상속하는 것은 선택 사항이 아닙니다 (내 위젯은 고유 한 클래스 계층 구조를가집니다).

내 질문은 : 어떻게 캡슐화 절을 잘못 추측하지 않고 비 활동 클래스 내에서 결과에 대한 활동을 시작할 수 있습니까?

덕분에, Balage

답변

2

나는 인터페이스와 청취자를 사용하는 것이 작업을 수행하는 가장 좋은 방법을 생각한다. Fragments http://developer.android.com/guide/topics/fundamentals/fragments.html을 부모 클래스로 사용하면이 작업을 수행 할 필요가 없습니다. 이것이 Google에서 생성 한 이유입니다.

기본적으로 활동이 ActivationResult (int requestCode, int resultCode, Intent 데이터)에서 발생하면 ApetWidgets에서 올바른 함수를 호출해야합니다. 활동에 특정 코드를 넣지 않고 위젯에 정보를 전달할 필요가 없습니다. 다시 한번, Fragment를 사용하면 모든 활동 라이프 사이클 메소드가 이미 위임되어 있으므로 재정의 할 준비가되었습니다.

+0

답변 주셔서 감사합니다. 조각은 완벽한 도구가 될 수 있지만 사용하지 못했습니다. API 레벨 7 기준에 부합해야하며 수준 11에 도입되었습니다. 다른 이유는 개인적입니다. 현재 많은 개발 단계에서 조각으로 이동하는 리팩토링이 필요합니다.) 그러나이 새로운 기능을 지적 해 주신 데 대해 감사드립니다. – Balage1551

+1

사실이 아닙니다. Android SDK 다운로드의 일부로 호환 라이브러리가 있습니다. 이렇게하면 1.6으로 돌아가서 지원할 수 있습니다. http://developer.android.com/sdk/compatibility-library.html이 항아리를 포함시킴으로써 Fragment API를 사용할 수 있으며 사용하고 작동합니다. 큰. 또한 이것 : http://android-developers.blogspot.com/2011/03/fragments-for-all.html – sgarman

0

이러한 구조를 사용했습니다. 먼저 위젯에 콜백 메소드를 구현하십시오. 두 번째 - 의도에서 위젯에 대한 링크를 넣으십시오. 귀하의 활동에서 제 3의 호출 위젯 콜백 메소드.

그건 그렇고 - 당신의 코드 디자인에 문제가있는 것처럼 들리 네요. secod 액티비티의 사용자 의존 결과를 얻으려면 위젯이 아닌 액티비티 클래스의 결과를 다루는 것이 더 좋습니다.

+0

감사합니다, 그것은 일할 수 있었다. 콜백 직후에 두 번째 활동이 닫히기 때문에 약간의 결합이 느껴지지만 실제 문제는 아닐 수도 있습니다. 호출자 활동 (위젯 포함)이 다시 시작되기 전에 콜백이 호출되기 때문에 신중한 설계와 백 캐싱이 필요합니다. – Balage1551