[안드로이드] 다이얼로그프래그먼트에서 onBackPressedCallBack()이 동작하지 않아요..

조회수 839회

다이얼로그프래그먼트 창을 띄운후 각종 데이터를 입력하고 뒤로 가기를 누르면 데이터를 액티비티로 보내 저장하려고하는데,, onBackPressedCallback이 잘동작하는지 테스트하기위하여 토스트메시지부터 띄워보는데 아무 반응이 없습니다..

onBackPress()를 사용하면 생명주기를 잘 관리해줘야한다해서 나온것이 onBackPressedCallback()을 사용하고 OnBackPressedDispatcher()을 사용하는편이 요즘 많이 쓴다고해서 쓰려는데 동작을 안하네요..ㅜㅜ

어떤것때문인지 알수 있을까요..

public class WritingCommentDialogFragment extends DialogFragment implements CommentModel.EditInputListener {
    OnBackPressedCallback callback;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_writing_comment_dialog, container, false);
        bindViews(view);
        addCommentItem();
        Toast.makeText(getContext(), "onCreateView()", Toast.LENGTH_SHORT).show();
        return view;
    }
    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.setCanceledOnTouchOutside(false);
        return dialog;
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        callback =  new OnBackPressedCallback(true) {
            @Override
            public void handleOnBackPressed() {
                Toast.makeText(getContext(), "TEST", Toast.LENGTH_SHORT).show();
            }
        };
        requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
    }

    @Override
    public void onDetach() {
        super.onDetach();
        callback.remove();
    }

    @Override
    public void onResume() {
        super.onResume();
        setDialogSize();
    }
}

routineAdapter.setOnAddRoutineClickListener(new RoutineAdapter.OnRoutineAddClickListener() {
            @Override
            public void OnAddRoutineClick() {
                WorkoutListDialogFragment routineDialog = new WorkoutListDialogFragment();
                routineDialog.show(getSupportFragmentManager(), "RoutineListDialog");
            }
        });
  • 이 다얄로그가 호출되는 방식의 코드도 올려주실 수 있을까요? 김은기 2021.3.11 10:40
  • 추가했습니다. 추가코드는 액티비티에서 동작합니다 codeslave 2021.3.12 04:21

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    DialogFragment 의 경우에는 Activitywindow 상위에 발생 되기 때문에 최상단에서 back key 이벤트를 가로채게 됩니다. 이것은 안드로이드 버그가 아니며, 정상동작이라고 볼 수 있습니다. DialogFragment 에서 결과 값을 넘기고자 하는 목적이시라면 별도의 리스너를 생성하셔서 onDismiss() or onCancel() 등의 메소드를 활용하시는 것이 좋을 것 같네요.

    참고 링크 입니다. https://issuetracker.google.com/issues/149173280

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 아 감사합니다..! 그런데 백 키 이벤트를 가로챈다는게 조금 이해가 잘가질 않는데요, 정확하게는 어느것이 백키 이벤트를 가로챈다는 말씀인가요? codeslave 2021.3.15 02:13

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)