[안드로이드] 다이얼로그프래그먼트에서 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");
}
});
1 답변
-
DialogFragment
의 경우에는Activity
의window
상위에 발생 되기 때문에 최상단에서 back key 이벤트를 가로채게 됩니다. 이것은 안드로이드 버그가 아니며, 정상동작이라고 볼 수 있습니다.DialogFragment
에서 결과 값을 넘기고자 하는 목적이시라면 별도의 리스너를 생성하셔서onDismiss()
oronCancel()
등의 메소드를 활용하시는 것이 좋을 것 같네요.-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력