ডায়ালগফ্রেগমেন্ট থেকে ফলাফল পাওয়ার অনেক সহজ উপায় রয়েছে।
প্রথমত, আপনার ক্রিয়াকলাপ, টুকরা বা খন্ডের ক্রিয়াকলাপে আপনাকে নিম্নলিখিত তথ্যগুলিতে যুক্ত করতে হবে:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Stuff to do, dependent on requestCode and resultCode
if(requestCode == 1) { // 1 is an arbitrary number, can be any int
// This is the return result of your DialogFragment
if(resultCode == 1) { // 1 is an arbitrary number, can be any int
// Now do what you need to do after the dialog dismisses.
}
}
}
requestCodeমূলত DialogFragment তোমাকে ডেকেছিলাম জন্য আপনার int- এ ট্যাগ, আমি দেখাব কিভাবে একটি দ্বিতীয় মধ্যে এই কাজ করে। রেজাল্টকোড হল কোড যা আপনি ডায়ালগফ্রেগমেন্ট থেকে আপনার বর্তমান অপেক্ষার ক্রিয়াকলাপ, টুকরা বা ফ্রেগমেন্টঅ্যাক্টিভিটি যা ঘটেছে তা জানিয়ে পাঠিয়েছিলেন।
কোডটির পরবর্তী অংশটি ডায়ালগফ্রেগমেন্টের কল। একটি উদাহরণ এখানে:
DialogFragment dialogFrag = new MyDialogFragment();
// This is the requestCode that you are sending.
dialogFrag.setTargetFragment(this, 1);
// This is the tag, "dialog" being sent.
dialogFrag.show(getFragmentManager(), "dialog");
এই তিনটি লাইন দিয়ে আপনি আপনার ডায়ালগফ্রেগমেন্টটি ঘোষণা করছেন, একটি অনুরোধকোড সেট করবেন (যা ডায়ালগটি বরখাস্ত হওয়ার পরে অন্টিভিটিজ রিসাল্ট (...) কল করবে এবং আপনি ডায়লগটি দেখিয়ে দিচ্ছেন thatএই সহজ)।
এখন, আপনার ডায়ালগফ্রেগমেন্টে আপনাকে কেবল একটি লাইন সরাসরি যুক্ত করতে হবে dismiss()যাতে আপনি রেজাল্ট কোডটি অনঅ্যাক্টিভিটি রিসাল্টে () এ প্রেরণ করতে পারেন।
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, getActivity().getIntent());
dismiss();
এটাই. দ্রষ্টব্য, রেজাল্ট কোডটি এই ক্ষেত্রে int resultCodeআমি যেটি সেট করেছি সে হিসাবে সংজ্ঞায়িত করা resultCode = 1;হয়।
এটি হ'ল, আপনি এখন আপনার ডায়ালগফ্রেগমেন্টের ফলাফলটি আপনার কলিং ক্রিয়াকলাপ, টুকরা বা ফ্রেগমেন্টএক্টিভিটিতে ফিরিয়ে দিতে পারেন।
এছাড়াও, দেখে মনে হচ্ছে এই তথ্যটি আগে পোস্ট করা হয়েছিল, তবে পর্যাপ্ত উদাহরণ দেওয়া হয়নি তাই আমি ভেবেছিলাম আমি আরও বিশদ সরবরাহ করব।
06.24.2016 সম্পাদনা করুন
আমি উপরের বিভ্রান্তকারী কোডের জন্য ক্ষমাপ্রার্থী। তবে আপনি অবশ্যই অবশ্যই লাইন হিসাবে দেখা ক্রিয়াকলাপের ফলাফল ফিরে পেতে পারবেন না:
dialogFrag.setTargetFragment(this, 1);
একটি লক্ষ্য সেট করে Fragmentএবং না Activity। সুতরাং এটি করতে আপনার একটি প্রয়োগ করতে হবে InterfaceCommunicator।
আপনার DialogFragmentসেটে একটি গ্লোবাল ভেরিয়েবল
public InterfaceCommunicator interfaceCommunicator;
এটি পরিচালনা করার জন্য একটি সর্বজনীন ফাংশন তৈরি করুন
public interface InterfaceCommunicator {
void sendRequestCode(int code);
}
অতঃপর যখন তোমরা কোড ফেরত পাঠাতে করার জন্য প্রস্তুত হন Activityযখন DialogFragmentচলমান সম্পন্ন হলে, আপনি কেবল লাইন আপনি আগে যোগ dismiss();আপনার DialogFragment:
interfaceCommunicator.sendRequestCode(1); // the parameter is any int code you choose.
আপনার ক্রিয়াকলাপে এখন আপনাকে দুটি জিনিস করতে হবে, প্রথমটি হ'ল কোডটির একটি লাইন যা আর প্রযোজ্য নয় তা মুছে ফেলা:
dialogFrag.setTargetFragment(this, 1);
তারপরে ইন্টারফেসটি কার্যকর করুন এবং আপনার কাজটি শেষ হয়ে গেল। implementsআপনার ক্লাসের একেবারে শীর্ষে ক্লজটিতে নিম্নলিখিত লাইনটি যুক্ত করে আপনি এটি করতে পারেন :
public class MyClass Activity implements MyDialogFragment.InterfaceCommunicator
এবং তারপরে @Overrideক্রিয়াকলাপে ফাংশন,
@Override
public void sendRequestCode(int code) {
// your code here
}
আপনি এই ইন্টারফেস পদ্ধতিটি যেমন ব্যবহার করেন ঠিক তেমনই ব্যবহার করেন onActivityResult()। ইন্টারফেস পদ্ধতি ব্যতীত অন্যটির DialogFragmentsজন্য Fragments।