DialogFragment에서 결과를받는 훨씬 간단한 방법이 있습니다.
먼저 Activity, Fragment 또는 FragmentActivity에서 다음 정보를 추가해야합니다.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Stuff to do, dependent on requestCode and resultCode
if(requestCode == 1) { // 1 is an arbitrary number, can be any int
// This is the return result of your DialogFragment
if(resultCode == 1) { // 1 is an arbitrary number, can be any int
// Now do what you need to do after the dialog dismisses.
}
}
}
이것은 requestCode
기본적으로 호출 한 DialogFragment의 int 레이블입니다. 이것이 잠시 후에 어떻게 작동하는지 보여 드리겠습니다. resultCode는 DialogFragment에서 현재 대기중인 Activity, Fragment 또는 FragmentActivity에 발생한 상황을 알려주는 코드입니다.
다음 코드는 DialogFragment를 호출하는 것입니다. 예를 들면 다음과 같습니다.
DialogFragment dialogFrag = new MyDialogFragment();
// This is the requestCode that you are sending.
dialogFrag.setTargetFragment(this, 1);
// This is the tag, "dialog" being sent.
dialogFrag.show(getFragmentManager(), "dialog");
이 세 줄을 사용하면 DialogFragment를 선언하고 대화 상자가 닫히면 requestCode (onActivityResult (...)를 호출 한 다음 대화 상자를 표시 함)를 설정합니다. 간단합니다.
이제 DialogFragment dismiss()
에서 resultCode를 onActivityResult ()로 다시 보내 려면 바로 앞에 한 줄만 추가 하면됩니다.
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, getActivity().getIntent());
dismiss();
그게 다야. 결과 코드 는이 경우 int resultCode
설정 한 것으로 정의됩니다 resultCode = 1;
.
이제 DialogFragment의 결과를 호출하는 Activity, Fragment 또는 FragmentActivity로 다시 보낼 수 있습니다.
또한이 정보가 이전에 게시 된 것처럼 보이지만 충분한 예가 없으므로 자세한 내용을 제공 할 것이라고 생각했습니다.
편집 06.24.2016
위의 잘못된 코드에 대해 사과드립니다. 그러나 가장 확실한 것은 결과를 라인으로 보는 활동으로 되돌릴 수 없다는 것입니다.
dialogFrag.setTargetFragment(this, 1);
Fragment
아닌 대상을 설정합니다 Activity
. 따라서 이렇게하려면 implement a을 사용해야합니다 InterfaceCommunicator
.
당신의 DialogFragment
세트에서 전역 변수
public InterfaceCommunicator interfaceCommunicator;
그것을 다루는 공개 함수를 만듭니다
public interface InterfaceCommunicator {
void sendRequestCode(int code);
}
당신이에 코드를 다시 보낼 준비가되면 Activity
이 때 DialogFragment
실행 완료, 당신은 단순히 전에 줄을 추가 dismiss();
하여 DialogFragment
:
interfaceCommunicator.sendRequestCode(1); // the parameter is any int code you choose.
활동에서 이제 두 가지를 수행해야합니다. 첫 번째는 더 이상 적용 할 수없는 한 줄의 코드를 제거하는 것입니다.
dialogFrag.setTargetFragment(this, 1);
그런 다음 인터페이스를 구현하면 모든 작업이 완료됩니다. implements
클래스 맨 위에 있는 절에 다음 줄을 추가하면 됩니다.
public class MyClass Activity implements MyDialogFragment.InterfaceCommunicator
그리고 @Override
활동의 기능은
@Override
public void sendRequestCode(int code) {
// your code here
}
메소드와 마찬가지로이 인터페이스 메소드를 사용합니다 onActivityResult()
. 인터페이스 방법은 for DialogFragments
이고 다른 하나는 for Fragments
입니다.