प्रश्न: डायलॉगफ्रैगमेंट से दूसरे फ्रैगमेंट में कॉलबैक कैसे बनता है। मेरे मामले में, शामिल गतिविधि डायलॉगफ्रेगमेंट से पूरी तरह से अनजान होनी चाहिए।
मेरे पास विचार करें
public class MyFragment extends Fragment implements OnClickListener
फिर किसी समय मैं कर सकता था
DialogFragment dialogFrag = MyDialogFragment.newInstance(this);
dialogFrag.show(getFragmentManager, null);
जहाँ MyDialogFragment दिखता है
protected OnClickListener listener;
public static DialogFragment newInstance(OnClickListener listener) {
DialogFragment fragment = new DialogFragment();
fragment.listener = listener;
return fragment;
}
लेकिन इस बात की कोई गारंटी नहीं है कि डायलॉगफ्रेगमेंट रुकने और अपने जीवनचक्र के माध्यम से फिर से शुरू होने पर श्रोता आसपास होंगे। Fragment में एकमात्र गारंटी वे हैं जो एक बंडल में setArguments और getArguments के माध्यम से पास की जाती हैं।
यदि श्रोता होना चाहिए तो गतिविधि को संदर्भित करने का एक तरीका है:
public Dialog onCreateDialog(Bundle bundle) {
OnClickListener listener = (OnClickListener) getActivity();
....
return new AlertDialog.Builder(getActivity())
........
.setAdapter(adapter, listener)
.create();
}
लेकिन मैं नहीं चाहता कि गतिविधि घटनाओं के लिए सुने, मुझे एक परिमार्जन की आवश्यकता है। वास्तव में, यह कोई भी जावा ऑब्जेक्ट हो सकता है जो OnClickListener को लागू करता है।
एक Fragment के ठोस उदाहरण पर विचार करें जो DialogFragment के माध्यम से एक AlertDialog प्रस्तुत करता है। इसमें Yes / No बटन है। मैं उस बटन को वापस कैसे भेज सकता हूं जो इसे बनाए गए फ्रेग्मेंट में है?
OnClickListener listener = (OnClickListener) getParentFragment();
इसके बजाय डायलॉगफ्रैगमेंट में बस का उपयोग क्यों नहीं कर सकते हैं , और आपका मुख्य टुकड़ा इंटरफ़ेस को लागू करता है जैसा कि आपने मूल रूप से किया था।