Câu hỏi: Làm thế nào để người ta tạo một cuộc gọi lại từ DialogFragment sang một đoạn khác. Trong trường hợp của tôi, Hoạt động liên quan nên hoàn toàn không biết về DialogFragment.
Hãy xem xét tôi có
public class MyFragment extends Fragment implements OnClickListener
Sau đó, tại một số điểm tôi có thể làm
DialogFragment dialogFrag = MyDialogFragment.newInstance(this);
dialogFrag.show(getFragmentManager, null);
MyDialogFragment trông như thế nào
protected OnClickListener listener;
public static DialogFragment newInstance(OnClickListener listener) {
DialogFragment fragment = new DialogFragment();
fragment.listener = listener;
return fragment;
}
Nhưng không có gì đảm bảo rằng người nghe sẽ ở xung quanh nếu DialogFragment tạm dừng và tiếp tục trong vòng đời của nó. Các đảm bảo duy nhất trong một mảnh là những thứ được truyền qua Bundle thông qua setArgument và getArgument.
Có một cách để tham chiếu hoạt động nếu nó phải là người nghe:
public Dialog onCreateDialog(Bundle bundle) {
OnClickListener listener = (OnClickListener) getActivity();
....
return new AlertDialog.Builder(getActivity())
........
.setAdapter(adapter, listener)
.create();
}
Nhưng tôi không muốn Activity lắng nghe các sự kiện, tôi cần một mảnh vỡ. Thực sự, nó có thể là bất kỳ đối tượng Java nào thực hiện OnClickListener.
Hãy xem xét ví dụ cụ thể về một Đoạn trình bày AlertDialog thông qua DialogFragment. Nó có các nút Có / Không. Làm thế nào tôi có thể gửi các nút bấm này trở lại Fragment đã tạo ra nó?
OnClickListener listener = (OnClickListener) getParentFragment();
trong DialogFragment và Fragment chính của bạn triển khai giao diện như ban đầu.