दिलचस्प पोस्ट
स्थानीय क्षेत्र को बल दें छवि कैसे आकर्षित करें छवि पर? अस्पष्टता है: 0 दृश्यता के रूप में एक ही प्रभाव पड़ता है: छिपा हुआ जहां x86-64 सिस्टम वी एबीआई दस्तावेज है? didRegisterForRemoteNotificationsWithDeviceToken ios8 में नहीं बुलाया, लेकिन किया था पंजीकरण … सेटिंग्स है घातक त्रुटि: अपरिभाषित फ़ंक्शन mysql_connect () पर कॉल करें XCode4 और कोर डेटा: एसक्यूएल डीबगिंग को सक्षम कैसे करें कैलेंडर अनुप्रयोग में पुनरावर्ती ईवेंट मॉडल करने का सबसे अच्छा तरीका क्या है? कर्तव्यों या अपवादों का उपयोग कर अनुबंध द्वारा डिजाइन? क्लासनोटफ़ाउंड एक्सडेस्टेशन com.mysql.jdbc.Driver SSMS में ntext या nvarchar (अधिकतम) से आप सभी टेक्स्ट को कैसे देखते हैं? मैं जावास्क्रिप्ट में एक window.setInterval कैसे रोकूं? पायथन कंसैटनेट टेक्स्ट फाइलें requirejs, नियंत्रक के आलसी लोडिंग के साथ कोणीय रूटर-राउटर स्विच स्टेटमेंट में कई मामलों में

डायलॉगफ्रैगमेंट से एक टुकड़े तक डेटा कैसे भेजा जाए?

मेरे पास एक टुकड़ा है जो उपयोगकर्ता इनपुट (एक स्ट्रिंग और एक पूर्णांक) प्राप्त करने के लिए Dialogfragment खोलता है। मैं इन दो चीजों को टुकड़े को वापस कैसे भेजूं?

यहां मेरा संवाद संरेखण है:

 public class DatePickerFragment extends DialogFragment { String Month; int Year; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getDialog().setTitle(getString(R.string.Date_Picker)); View v = inflater.inflate(R.layout.date_picker_dialog, container, false); Spinner months = (Spinner) v.findViewById(R.id.months_spinner); ArrayAdapter<CharSequence> monthadapter = ArrayAdapter.createFromResource(getActivity(), R.array.Months, R.layout.picker_row); months.setAdapter(monthadapter); months.setOnItemSelectedListener(new OnItemSelectedListener(){ @Override public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int monthplace, long id) { Month = Integer.toString(monthplace); } public void onNothingSelected(AdapterView<?> parent) { } }); Spinner years = (Spinner) v.findViewById(R.id.years_spinner); ArrayAdapter<CharSequence> yearadapter = ArrayAdapter.createFromResource(getActivity(), R.array.Years, R.layout.picker_row); years.setAdapter(yearadapter); years.setOnItemSelectedListener(new OnItemSelectedListener(){ @Override public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int yearplace, long id) { if (yearplace == 0){ Year = 2012; }if (yearplace == 1){ Year = 2013; }if (yearplace == 2){ Year = 2014; } } public void onNothingSelected(AdapterView<?> parent) {} }); Button button = (Button) v.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { getDialog().dismiss(); } }); return v; } } 

मुझे बटन क्लिक करने और getDialog().dismiss() से पहले डेटा भेजने की आवश्यकता है getDialog().dismiss()

यहां यह टुकड़ा है कि डेटा को भेजा जाना चाहिए:

 public class CalendarFragment extends Fragment { int Year; String Month; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreate(savedInstanceState); int position = getArguments().getInt("position"); String[] categories = getResources().getStringArray(R.array.categories); getActivity().getActionBar().setTitle(categories[position]); View v = inflater.inflate(R.layout.calendar_fragment_layout, container, false); final Calendar c = Calendar.getInstance(); SimpleDateFormat month_date = new SimpleDateFormat("MMMMMMMMM"); Month = month_date.format(c.getTime()); Year = c.get(Calendar.YEAR); Button button = (Button) v.findViewById(R.id.button); button.setText(Month + " "+ Year); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { new DatePickerFragment().show(getFragmentManager(), "MyProgressDialog"); } }); return v; } } 

इसलिए एक बार जब उपयोगकर्ता Dialogfragment में एक तारीख का चयन करता है, तो उसे महीने और वर्ष वापस करना होगा।

उसके बाद, बटन पर पाठ को उपयोगकर्ता द्वारा निर्दिष्ट महीने और वर्ष में बदलना चाहिए।

वेब के समाधान से एकत्रित समाधान "डायलॉगफ्रैगमेंट से एक टुकड़े तक डेटा कैसे भेजा जाए?"

नोट: यह एक या दो टुकड़ों के विशिष्ट कॉल से अलग है, ढीले युग्मित घटकों के बीच डाटा एक्सचेंज के एपीआई के कार्यान्वयन के लिए एक सामान्य दृष्टिकोण नुस्खा है। तुल्यकालन, क्रियाकलाप, संवाद और आपके आवेदन के किसी भी अन्य घटक के बीच डेटा का आदान-प्रदान करने के लिए आप इस दृष्टिकोण का सुरक्षित रूप से उपयोग कर सकते हैं।


यहाँ नुस्खा है:

  1. Fragment (यानी methodToPassDataBackToFragment(... data); ) को methodToPassDataBackToFragment(... data); करने के लिए आवश्यक डेटा को पास करने के लिए उपयोग किए जाने वाले विधि के साथ Interface (अर्थात MyDialogCallbackContract ) बनाएं।
  2. सुनिश्चित करें कि आपका DialogFragment उस अनुबंध को पूरा करता है: class MyFragment extends Fragment implements MyDialogCallbackContract {....}
  3. DialogFragment निर्माण पर myDialogFragment.setTargetFragment(this, 0); को कॉल करके डायलॉगफ्रैगमेंट के लक्ष्य के रूप में अपना आवंटित Fragment सेट करें myDialogFragment.setTargetFragment(this, 0);
  4. अपने DialogFragment , getTargetFragment(); को कॉल करके उस DialogFragment को प्राप्त करें getTargetFragment(); और कलाकारों ने चरण 1 में आपके द्वारा बनाई गई अनुबंध इंटरफ़ेस को ऑब्जेक्ट लौटा दिया: MyDialogCallbackContract mHost = (MyDialogCallbackContract)getTargetFragment(); । यह कदम आपको यह सुनिश्चित करने देता है कि आपका लक्ष्य आपके द्वारा आवश्यक अनुबंध को लागू करता है, इसलिए आप सुरक्षित रूप से अपने डेटा को सौंपने के लिए अनुबंध के तरीकों पर कॉल कर सकते हैं। नोट करें कि आपका लक्ष्य टुकड़ा MyDialogCallbackContract इंटरफ़ेस को लागू नहीं कर MyDialogCallbackContract है, जो आमतौर पर तब तक नहीं होना चाहिए जब तक कि आप बहुत अधिक प्रति-पेस्ट-कोडिंग नहीं कर रहे हों या शायद, आपका प्रोजेक्ट बाहरी कोड, लाइब्रेरी, प्लगइन्स आदि का उपयोग करता है (उदाहरण के लिए) मामले में आपको अपवाद को पकड़ना चाहिए और उपयोगकर्ता को बता देना चाहिए कि प्लगिन संगत नहीं है)
  5. जब समय आ जाता है, तो आप methodToPassData() डेटा को चाहते हैं, उसे पास करने के लिए कॉल methodToPassData() कॉल करें, अर्थात इस तरह ((MyDialogCallbackContract)getTargetFragment()).methodToPassDataBackToFragment(data); । अगर आपने पहले से ही onAttach() में एक चर (यानी mHost ) को पहले से ही लक्ष्य टुकड़ा डाला और निर्दिष्ट किया है, तो यह कोड सिर्फ mHost.methodToPassDataBackToFragment(data);
  6. Voilà। आपने संवाद से अपने डेटा को सफलतापूर्वक पारित कर दिया है ताकि टुकड़े को बुलाया जा सके।

किसी भी इंटरफेस का उपयोग किए बिना यहाँ एक और नुस्खा है DialogFragment और Fragment के बीच डेटा को पारित करने के लिए बस setTargetFragment और Bundle का उपयोग करना

 public static final int DATEPICKER_FRAGMENT = 1; // class variable 

1. नीचे दिखाए गए अनुसार DialogFragment को कॉल करें:

 // create dialog fragment DatePickerFragment dialog = new DatePickerFragment(); // optionally pass arguments to the dialog fragment Bundle args = new Bundle(); args.putString("pickerStyle", "fancy"); dialog.setArguments(args); // setup link back to use and display dialog.setTargetFragment(this, DATEPICKER_FRAGMENT); dialog.show(getFragmentManager().beginTransaction(), "MyProgressDialog") 

2. लक्ष्य खंड में किसी भी जानकारी को वापस करने के लिए DialogFragment में एक Intent में अतिरिक्त Bundle उपयोग करें। नीचे दिए गए कोड में Button#onClick() DatePickerFragment घटना एक स्ट्रिंग और पूर्णांक गुजरता है

 Intent i = new Intent() .putExtra("month", getMonthString()) .putExtra("year", getYearInt()); getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, i); dismiss(); 

3. मूल्यों को पढ़ने के लिए CalendarFragment का उपयोग करें। onActivityResult() विधि:

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case DATEPICKER_FRAGMENT: if (resultCode == Activity.RESULT_OK) { Bundle bundle = data.getExtras(); String mMonth = bundle.getString("month", Month); int mYear = bundle.getInt("year"); Log.i("PICKER", "Got year=" + year + " and month=" + month + ", yay!"); } else if (resultCode == Activity.RESULT_CANCELED) { ... } break; } }