ফ্র্যাগমেন্ট আবার ব্যবহার করতে, সেগুলিকে সম্পূর্ণ স্বয়ংসম্পূর্ণ কম্পোনেন্ট হিসেবে তৈরি করুন যা তাদের নিজস্ব লেআউট ও আচরণ নির্ধারণ করে। আপনি একবার এই পুনর্ব্যবহারযোগ্য ফ্র্যাগমেন্টগুলি সংজ্ঞায়িত করলে, আপনি সেগুলিকে একটি অ্যাক্টিভিটির সাথে যুক্ত করতে পারেন এবং সামগ্রিক কম্পোজিট UI উপলব্ধি করতে অ্যাপ্লিকেশন লজিকের সাথে সেগুলিকে কানেক্ট করতে পারেন।
ব্যবহারকারীর ইভেন্টে সঠিকভাবে প্রতিক্রিয়া জানাতে এবং স্টেট সংক্রান্ত তথ্য শেয়ার করতে, আপনাকে প্রায়শই একটি অ্যাক্টিভিটি ও তার ফ্র্যাগমেন্টের মধ্যে অথবা দুই বা তার বেশি ফ্র্যাগমেন্টের মধ্যে কমিউনিকেশন চ্যানেল তৈরি করতে হয়। ফ্র্যাগমেন্টকে স্বয়ংসম্পূর্ণ রাখতে, অন্যান্য ফ্র্যাগমেন্ট বা হোস্ট অ্যাক্টিভিটির সাথে সরাসরি যোগাযোগ করতে ফ্র্যাগমেন্টকে অনুমতি দেবেন না।
Fragment লাইব্রেরি যোগাযোগের জন্য দুটি বিকল্প প্রদান করে: একটি শেয়ার করা
ViewModel এবং ফ্র্যাগমেন্ট
Result API। সাজেস্ট করা বিকল্পটি ব্যবহারের ক্ষেত্রের উপর নির্ভর করে। কাস্টম API-এর সাথে
পারসিস্টেন্ট ডেটা শেয়ার করতে, ViewModel ব্যবহার করুন। Bundle-এ
রাখা যেতে পারে এমন ডেটা সহ এককালীন ফলাফলের জন্য, Fragment Result API ব্যবহার করুন।
আপনার ফ্র্যাগমেন্ট ও অ্যাক্টিভিটির মধ্যে যোগাযোগ করতে কীভাবে ViewModel ও Fragment
Result API ব্যবহার করবেন তা নিম্নলিখিত বিভাগ থেকে জানতে পারবেন।
ViewModel ব্যবহার করে ডেটা শেয়ার করা
ViewModel হল একটি আদর্শ পছন্দ যখন
আপনাকে একাধিক ফ্র্যাগমেন্টের মধ্যে বা ফ্র্যাগমেন্ট এবং তাদের হোস্ট অ্যাক্টিভিটির মধ্যে ডেটা শেয়ার করতে হবে।
ViewModel অবজেক্ট UI ডেটা স্টোর ও
ম্যানেজ করে। ViewModel সম্পর্কে আরও তথ্যের জন্য, ViewModel ওভারভিউ দেখুন।
হোস্ট অ্যাক্টিভিটির সাথে ডেটা শেয়ার করুন
কিছু ক্ষেত্রে, আপনাকে ফ্র্যাগমেন্ট এবং তার হোস্ট অ্যাক্টিভিটির মধ্যে ডেটা শেয়ার করতে হতে পারে। যেমন, আপনি ফ্র্যাগমেন্টের মধ্যে ইন্টার্যাকশনের উপর ভিত্তি করে গ্লোবাল UI কম্পোনেন্ট টগল করতে চাইতে পারেন।
নিম্নলিখিত ItemViewModel বিবেচনা করুন:
Kotlin
class ItemViewModel : ViewModel() { private val mutableSelectedItem = MutableLiveData<Item>() val selectedItem: LiveData<Item> get() = mutableSelectedItem fun selectItem(item: Item) { mutableSelectedItem.value = item } }
জাভা
public class ItemViewModel extends ViewModel { private final MutableLiveData<Item> selectedItem = new MutableLiveData<Item>(); public void selectItem(Item item) { selectedItem.setValue(item); } public LiveData<Item> getSelectedItem() { return selectedItem; } }
এই উদাহরণে, সেভ করা ডেটা
MutableLiveData ক্লাসে র্যাপ করা আছে।
LiveData হল লাইফসাইকেল-অ্যাওয়ার
পর্যবেক্ষণযোগ্য ডেটা হোল্ডার ক্লাস। MutableLiveData-এর ভ্যালু পরিবর্তন
করা যায়। LiveData সম্পর্কে আরও তথ্যের জন্য, LiveData ওভারভিউ দেখুন।
আপনার ফ্র্যাগমেন্ট এবং এর হোস্ট অ্যাক্টিভিটি, অ্যাক্টিভিটি স্কোপ সহ ViewModel-এর শেয়ার করা ইনস্ট্যান্স
উদ্ধার করতে পারে। এর জন্য অ্যাক্টিভিটিকে
ViewModelProvider
কনস্ট্রাক্টরে পাস করতে হবে। ViewModelProvider, ViewModel ইনস্ট্যান্টিয়েট করা
অথবা এটি আগে থেকেই থাকলে তা ফিরিয়ে আনার বিষয়টি ম্যানেজ করে। দুটি কম্পোনেন্টই এই ডেটা দেখতে ও
পরিবর্তন করতে পারে।
Kotlin
class MainActivity : AppCompatActivity() { // Using the viewModels() Kotlin property delegate from the activity-ktx // artifact to retrieve the ViewModel in the activity scope. private val viewModel: ItemViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) viewModel.selectedItem.observe(this, Observer { item -> // Perform an action with the latest item data. }) } } class ListFragment : Fragment() { // Using the activityViewModels() Kotlin property delegate from the // fragment-ktx artifact to retrieve the ViewModel in the activity scope. private val viewModel: ItemViewModel by activityViewModels() // Called when the item is clicked. fun onItemClicked(item: Item) { // Set a new item. viewModel.selectItem(item) } }
জাভা
public class MainActivity extends AppCompatActivity { private ItemViewModel viewModel; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); viewModel = new ViewModelProvider(this).get(ItemViewModel.class); viewModel.getSelectedItem().observe(this, item -> { // Perform an action with the latest item data. }); } } public class ListFragment extends Fragment { private ItemViewModel viewModel; @Override public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); viewModel = new ViewModelProvider(requireActivity()).get(ItemViewModel.class); ... items.setOnClickListener(item -> { // Set a new item. viewModel.select(item); }); } }
ফ্র্যাগমেন্টের মধ্যে ডেটা শেয়ার করা
একই অ্যাক্টিভিটিতে দুই বা তার বেশি ফ্র্যাগমেন্টকে প্রায়ই একে অপরের সাথে যোগাযোগ করতে হয়। যেমন, ধরুন একটি ফ্র্যাগমেন্টে তালিকা দেখানো হচ্ছে এবং অন্যটিতে ব্যবহারকারীকে তালিকায় বিভিন্ন ফিল্টার প্রয়োগ করতে দেওয়া হচ্ছে। ফ্র্যাগমেন্ট সরাসরি যোগাযোগ না করলে এই কেস প্রয়োগ করা সহজ নয়, তবে সেক্ষেত্রে সেগুলি আর স্বয়ংসম্পূর্ণ থাকে না। এছাড়াও, দুটি ফ্র্যাগমেন্টকেই এমন পরিস্থিতি ম্যানেজ করতে হবে যেখানে অন্য ফ্র্যাগমেন্টটি এখনও তৈরি বা দৃশ্যমান হয়নি।
এইসব ফ্র্যাগমেন্ট তাদের অ্যাক্টিভিটি স্কোপ ব্যবহার করে ViewModel শেয়ার করতে পারে
যাতে এই কমিউনিকেশন ম্যানেজ করা যায়। এইভাবে ViewModel শেয়ার করার মাধ্যমে,
ফ্র্যাগমেন্টগুলিকে একে অপরের সম্পর্কে জানতে হবে না এবং অ্যাক্টিভিটিকে
কমিউনিকেশন সহজ করার জন্য কিছু করতে হবে না।
নিচের উদাহরণে দেখানো হয়েছে কীভাবে দুটি ফ্র্যাগমেন্ট যোগাযোগের জন্য একটি শেয়ার করা
ViewModel ব্যবহার করতে পারে:
Kotlin
class ListViewModel : ViewModel() { val filters = MutableLiveData<Set<Filter>>() private val originalList: LiveData<List<Item>>() = ... val filteredList: LiveData<List<Item>> = ... fun addFilter(filter: Filter) { ... } fun removeFilter(filter: Filter) { ... } } class ListFragment : Fragment() { // Using the activityViewModels() Kotlin property delegate from the // fragment-ktx artifact to retrieve the ViewModel in the activity scope. private val viewModel: ListViewModel by activityViewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { viewModel.filteredList.observe(viewLifecycleOwner, Observer { list -> // Update the list UI. } } } class FilterFragment : Fragment() { private val viewModel: ListViewModel by activityViewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { viewModel.filters.observe(viewLifecycleOwner, Observer { set -> // Update the selected filters UI. } } fun onFilterSelected(filter: Filter) = viewModel.addFilter(filter) fun onFilterDeselected(filter: Filter) = viewModel.removeFilter(filter) }
জাভা
public class ListViewModel extends ViewModel { private final MutableLiveData<Set<Filter>> filters = new MutableLiveData<>(); private final LiveData<List<Item>> originalList = ...; private final LiveData<List<Item>> filteredList = ...; public LiveData<List<Item>> getFilteredList() { return filteredList; } public LiveData<Set<Filter>> getFilters() { return filters; } public void addFilter(Filter filter) { ... } public void removeFilter(Filter filter) { ... } } public class ListFragment extends Fragment { private ListViewModel viewModel; @Override public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); viewModel = new ViewModelProvider(requireActivity()).get(ListViewModel.class); viewModel.getFilteredList().observe(getViewLifecycleOwner(), list -> { // Update the list UI. }); } } public class FilterFragment extends Fragment { private ListViewModel viewModel; @Override public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { viewModel = new ViewModelProvider(requireActivity()).get(ListViewModel.class); viewModel.getFilters().observe(getViewLifecycleOwner(), set -> { // Update the selected filters UI. }); } public void onFilterSelected(Filter filter) { viewModel.addFilter(filter); } public void onFilterDeselected(Filter filter) { viewModel.removeFilter(filter); } }
দুটি ফ্র্যাগমেন্টই তাদের হোস্ট অ্যাক্টিভিটিকে ViewModelProvider-এর স্কোপ হিসেবে ব্যবহার করে। ফ্র্যাগমেন্টগুলি একই স্কোপ ব্যবহার করে বলে, তারা ViewModel-এর একই ইনস্ট্যান্স পায়, যা তাদের একে অপরের সাথে যোগাযোগ করতে সাহায্য করে।
পেরেন্ট ও চাইল্ড ফ্র্যাগমেন্টের মধ্যে ডেটা শেয়ার করা
চাইল্ড ফ্র্যাগমেন্ট নিয়ে কাজ করার সময়, আপনার পেরেন্ট ফ্র্যাগমেন্ট ও তার চাইল্ড
ফ্র্যাগমেন্টকে একে অপরের সাথে ডেটা শেয়ার করতে হতে পারে। এইসব ফ্র্যাগমেন্টের মধ্যে ডেটা শেয়ার করতে, নিচে দেখানো উদাহরণের মতো, পেরেন্ট ফ্র্যাগমেন্টকে ViewModel স্কোপ হিসেবে
ব্যবহার করুন:
Kotlin
class ListFragment: Fragment() { // Using the viewModels() Kotlin property delegate from the fragment-ktx // artifact to retrieve the ViewModel. private val viewModel: ListViewModel by viewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { viewModel.filteredList.observe(viewLifecycleOwner, Observer { list -> // Update the list UI. } } } class ChildFragment: Fragment() { // Using the viewModels() Kotlin property delegate from the fragment-ktx // artifact to retrieve the ViewModel using the parent fragment's scope private val viewModel: ListViewModel by viewModels({requireParentFragment()}) ... }
জাভা
public class ListFragment extends Fragment { private ListViewModel viewModel; @Override public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { viewModel = new ViewModelProvider(this).get(ListViewModel.class); viewModel.getFilteredList().observe(getViewLifecycleOwner(), list -> { // Update the list UI. } } } public class ChildFragment extends Fragment { private ListViewModel viewModel; @Override public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { viewModel = new ViewModelProvider(requireParentFragment()).get(ListViewModel.class); ... } }
নেভিগেশন গ্রাফে ViewModel-এর স্কোপ নির্ধারণ করা
আপনি নেভিগেশন লাইব্রেরি ব্যবহার করলে, গন্তব্যের NavBackStackEntry-এর লাইফসাইকেলে
ViewModel-এর স্কোপও নির্ধারণ করতে পারবেন। যেমন, ViewModel-এর স্কোপ ListFragment-এর জন্য
NavBackStackEntry-এ সীমাবদ্ধ করা যেতে পারে:
Kotlin
class ListFragment: Fragment() { // Using the navGraphViewModels() Kotlin property delegate from the fragment-ktx // artifact to retrieve the ViewModel using the NavBackStackEntry scope. // R.id.list_fragment == the destination id of the ListFragment destination private val viewModel: ListViewModel by navGraphViewModels(R.id.list_fragment) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { viewModel.filteredList.observe(viewLifecycleOwner, Observer { item -> // Update the list UI. } } }
জাভা
public class ListFragment extends Fragment { private ListViewModel viewModel; @Override public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { NavController navController = NavHostFragment.findNavController(this); NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.list_fragment) viewModel = new ViewModelProvider(backStackEntry).get(ListViewModel.class); viewModel.getFilteredList().observe(getViewLifecycleOwner(), list -> { // Update the list UI. } } }
ViewModel-এর স্কোপ NavBackStackEntry-এ সেট করার ব্যাপারে আরও তথ্য পেতে, নেভিগেশন কম্পোনেন্টের সাথে প্রোগ্রাম্যাটিক্যালি ইন্টার্যাক্ট করুন দেখুন।
Fragment Result API ব্যবহার করে ফলাফল পান
কিছু ক্ষেত্রে, আপনি দুটি ফ্র্যাগমেন্টের মধ্যে অথবা একটি ফ্র্যাগমেন্ট ও তার হোস্ট অ্যাক্টিভিটির মধ্যে এককালীন ভ্যালু পাস করতে চাইতে পারেন। যেমন, আপনার কাছে এমন একটি ফ্র্যাগমেন্ট থাকতে পারে যা QR কোড পড়ে এবং ডেটা আগের ফ্র্যাগমেন্টে ফেরত পাঠায়।
Fragment ভার্সন 1.3.0 এবং তার পরবর্তী ভার্সনে,
প্রতিটি FragmentManager
FragmentResultOwner
ইমপ্লিমেন্ট করে।
এর অর্থ হল, ফ্র্যাগমেন্ট ফলাফলের জন্য FragmentManager একটি সেন্ট্রাল স্টোর হিসেবে কাজ করতে
পারে। এই পরিবর্তন, কম্পোনেন্টগুলিকে একে অপরের সাথে সরাসরি রেফারেন্স না রেখেই,
ফ্র্যাগমেন্ট ফলাফল সেট করে এবং সেই ফলাফলগুলি শুনে
একে অপরের সাথে যোগাযোগ করতে দেয়।
ফ্র্যাগমেন্টের মধ্যে ফলাফল পাস করুন
ফ্র্যাগমেন্ট B থেকে ফ্র্যাগমেন্ট A-তে ডেটা ফেরত পাঠাতে, প্রথমে ফ্র্যাগমেন্ট A-তে একটি ফলাফল লিসেনার সেট করুন, যে ফ্র্যাগমেন্ট ফলাফলটি গ্রহণ করে। নিচের উদাহরণে দেখানো হয়েছে, ফ্র্যাগমেন্ট A-এর FragmentManager-এ
setFragmentResultListener()
কল করুন:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Use the Kotlin extension in the fragment-ktx artifact. setFragmentResultListener("requestKey") { requestKey, bundle -> // We use a String here, but any type that can be put in a Bundle is supported. val result = bundle.getString("bundleKey") // Do something with the result. } }
জাভা
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); getParentFragmentManager().setFragmentResultListener("requestKey", this, new FragmentResultListener() { @Override public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle bundle) { // We use a String here, but any type that can be put in a Bundle is supported. String result = bundle.getString("bundleKey"); // Do something with the result. } }); }
FragmentManager ব্যবহার করে ফ্র্যাগমেন্ট A-তে ডেটা পাঠায়।ফ্র্যাগমেন্ট B-তে, যে ফ্র্যাগমেন্ট ফলাফল তৈরি করছে, একই requestKey ব্যবহার করে একই FragmentManager-এ ফলাফল
সেট করুন। আপনি
setFragmentResult()
API ব্যবহার করে
এটি করতে পারবেন:
Kotlin
button.setOnClickListener { val result = "result" // Use the Kotlin extension in the fragment-ktx artifact. setFragmentResult("requestKey", bundleOf("bundleKey" to result)) }
জাভা
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Bundle result = new Bundle(); result.putString("bundleKey", "result"); getParentFragmentManager().setFragmentResult("requestKey", result); } });
ফ্র্যাগমেন্ট A তারপর ফলাফল পায় এবং ফ্র্যাগমেন্ট
STARTED
হলে লিসনার কলব্যাক এক্সিকিউট করে।
প্রদত্ত 'কী'-এর জন্য আপনার কাছে শুধুমাত্র একটি লিসেনার ও ফলাফল থাকতে পারে। আপনি একই কীয়ের জন্য একাধিকবার
setFragmentResult() কল করলে এবং লিসেনার
STARTED না হলে, সিস্টেম যেকোনও বাকি থাকা ফলাফল আপনার আপডেট করা
ফলাফল দিয়ে পরিবর্তন করে।
আপনি যদি কোনও ফলাফল সেট করেন এবং সেটি রিসিভ করার জন্য কোনও সংশ্লিষ্ট লিসেনার না থাকে,
তাহলে আপনি একই কী সহ কোনও লিসেনার সেট না করা পর্যন্ত ফলাফলটি FragmentManager-এ
স্টোর করা হয়। শ্রোতা ফলাফল পাওয়ার পরে
onFragmentResult() কলব্যাক ফায়ার করলে, ফলাফল মুছে যায়। এই আচরণের
দুটি প্রধান প্রভাব রয়েছে:
- ব্যাক স্ট্যাকের ফ্র্যাগমেন্টগুলি পপ না করা পর্যন্ত এবং
STARTEDনা হওয়া পর্যন্ত ফলাফল পায় না। - ফলাফল সেট করার সময় ফলাফলের জন্য অপেক্ষা করা ফ্র্যাগমেন্ট
STARTEDহলে, লিসনারের কলব্যাক সাথে সাথে ফায়ার করে।
ফ্র্যাগমেন্টের ফলাফল পরীক্ষা করুন
setFragmentResult() ও setFragmentResultListener()-এ কল টেস্ট করতে
FragmentScenario
ব্যবহার করুন।
launchFragmentInContainer
বা
launchFragment
ব্যবহার করে টেস্টের অধীনে ফ্র্যাগমেন্টের জন্য একটি সিনারিও তৈরি করুন এবং তারপরে টেস্ট করা হচ্ছে না এমন পদ্ধতি ম্যানুয়ালি কল করুন।
setFragmentResultListener() পরীক্ষা করতে, setFragmentResultListener()-এ কল করে এমন ফ্র্যাগমেন্ট সহ
একটি পরিস্থিতি তৈরি করুন। এরপর,
সরাসরি setFragmentResult()-এ কল করুন এবং ফলাফল যাচাই করুন:
@Test
fun testFragmentResultListener() {
val scenario = launchFragmentInContainer<ResultListenerFragment>()
scenario.onFragment { fragment ->
val expectedResult = "result"
fragment.parentFragmentManager.setFragmentResult("requestKey", bundleOf("bundleKey" to expectedResult))
assertThat(fragment.result).isEqualTo(expectedResult)
}
}
class ResultListenerFragment : Fragment() {
var result : String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Use the Kotlin extension in the fragment-ktx artifact.
setFragmentResultListener("requestKey") { requestKey, bundle ->
result = bundle.getString("bundleKey")
}
}
}
setFragmentResult() পরীক্ষা করতে, ফ্র্যাগমেন্ট সহ একটি সিনারিও তৈরি করুন যা
setFragmentResult()-এ কল করে। এরপর, সরাসরি setFragmentResultListener()-এ
কল করুন এবং ফলাফল যাচাই করুন:
@Test
fun testFragmentResult() {
val scenario = launchFragmentInContainer<ResultFragment>()
lateinit var actualResult: String?
scenario.onFragment { fragment ->
fragment.parentFragmentManager
.setFragmentResultListener("requestKey") { requestKey, bundle ->
actualResult = bundle.getString("bundleKey")
}
}
onView(withId(R.id.result_button)).perform(click())
assertThat(actualResult).isEqualTo("result")
}
class ResultFragment : Fragment(R.layout.fragment_result) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
view.findViewById(R.id.result_button).setOnClickListener {
val result = "result"
// Use the Kotlin extension in the fragment-ktx artifact.
setFragmentResult("requestKey", bundleOf("bundleKey" to result))
}
}
}
প্যারেন্ট ও চাইল্ড ফ্র্যাগমেন্টের মধ্যে ফলাফল পাস করা
চাইল্ড ফ্র্যাগমেন্ট থেকে পেরেন্ট ফ্র্যাগমেন্টে ফলাফল পাস করতে,
setFragmentResultListener() কল করার সময় getParentFragmentManager()-এর পরিবর্তে
পেরেন্ট ফ্র্যাগমেন্ট থেকে getChildFragmentManager() ব্যবহার করুন।
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Set the listener on the child fragmentManager. childFragmentManager.setFragmentResultListener("requestKey") { key, bundle -> val result = bundle.getString("bundleKey") // Do something with the result. } }
জাভা
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the listener on the child fragmentManager. getChildFragmentManager() .setFragmentResultListener("requestKey", this, new FragmentResultListener() { @Override public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle bundle) { String result = bundle.getString("bundleKey"); // Do something with the result. } }); }
FragmentManager ব্যবহার করে পেরেন্ট ফ্র্যাগমেন্টে ফলাফল পাঠাতে পারে।চাইল্ড ফ্র্যাগমেন্ট তার FragmentManager-এ ফলাফল সেট করে। ফ্র্যাগমেন্ট STARTED হলে
অভিভাবক ফলাফল পান:
Kotlin
button.setOnClickListener { val result = "result" // Use the Kotlin extension in the fragment-ktx artifact. setFragmentResult("requestKey", bundleOf("bundleKey" to result)) }
জাভা
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Bundle result = new Bundle(); result.putString("bundleKey", "result"); // The child fragment needs to still set the result on its parent fragment manager. getParentFragmentManager().setFragmentResult("requestKey", result); } });
হোস্ট অ্যাক্টিভিটিতে ফলাফল পান
হোস্ট অ্যাক্টিভিটিতে ফ্র্যাগমেন্ট ফলাফল পেতে, getSupportFragmentManager() ব্যবহার করে ফ্র্যাগমেন্ট ম্যানেজারে
ফলাফল লিসেনার সেট করুন।
Kotlin
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) supportFragmentManager .setFragmentResultListener("requestKey", this) { requestKey, bundle -> // We use a String here, but any type that can be put in a Bundle is supported. val result = bundle.getString("bundleKey") // Do something with the result. } } }
জাভা
class MainActivity extends AppCompatActivity { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportFragmentManager().setFragmentResultListener("requestKey", this, new FragmentResultListener() { @Override public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle bundle) { // We use a String here, but any type that can be put in a Bundle is supported. String result = bundle.getString("bundleKey"); // Do something with the result. } }); } }