2014-01-27 4 views
2

나는 응용 프로그램에서 대화 상자를 처리하기 위해 DialogFragment을 사용 해왔다.DialogFragment 콜백을 처리하는 가장 좋은 방법은 무엇입니까?

내가 그것을 사용하는 방법에 대한 몇 가지 예를 제공 this을 읽었습니다,하지만 항상 같은 것들을 사용이 는 사전에 캐스트를 의무화 나는이 구현별로 좋아하지 않아요

((FragmentAlertDialog)getActivity()).doPositiveClick(); 
((FragmentAlertDialog)getActivity()).doNegativeClick(); 

알 수없는 활동 인이므로 매우 강력하지는 않습니다.

는 또한 알고 통과하고 FragmentDialog 내부 콜백을 저장하는 것은 액티비티를 참조하는 경우, 예를 들어 회전 한 후, 그 활동이 파괴되었을 수 있기 때문에 좋은 옵션하지 ... 그리고 콜백이 아닌 업데이트되었습니다.

또한 액티비티가 onResume을 전달할 때 콜백을 업데이트하는 것은 매우 유용한 옵션이 아닙니다. 어떤 Dialog가 표시되는지 알고 있어야하고 더 큰 앱에서 로직을 조금 까다롭게 만드는 것과 관련된 콜백을 설정해야합니다.

항상 가장 최신 콜백을 유지하면서 캐스트를 피하기 위해 어떤 구현을 제안합니까?

답변

1

콜백을 사용할 수없는 이유를 열거했습니다. 불행히도, 나는 캐스트 (또는 유사한 것)가 피할 수 없다고 생각합니다. 전체 패러다임은 솔직히 다소 어색합니다.

여러 활동간에 대화 조각을 공유하려는 경우 인터페이스를 사용할 수 있습니다.

((IXyzDialogHost)GetActivity())->onSomethingHappened() 

그런 접근법에 대해 언급해야 할 것이 있습니다. 나는 개인적으로 그 접근법을 직접 사용했다고 말할 수는 없지만, 그것에 대해 생각해 보면 앞으로 나아갈 유혹을 느낄 수 있습니다.

class XyzDialogFragment { 
    { 
     public static DialogFragment Create(IXyzDialogHost activity, ...) 
     { 
      ... 
     } 

    } 

을하지만 캐스트는 여전히있다 : 적어도 당신은 번들의 설정 조각 관리자 거래 및 기타 unpleasantries을 다루는 적절한 정적 DialogFragment.Create 방법으로 호출 활동에 대한 계약을 적용 할 수 있습니다.

관련 문제