Is there a method that works like start fragment for result? Is there a method that works like start fragment for result? android android

Is there a method that works like start fragment for result?


All of the Fragments live inside Activities. Starting a Fragment for a result doesn't make much sense, because the Activity that houses it always has access to it, and vice versa. If the Fragment needs to pass on a result, it can access its Activity and set its result and finish it. In the case of swapping Fragments in a single Activity, well the Activity is still accessible by both Fragments, and all your message passing can simply go through the Activity.

Just remember that you always have communication between a Fragment and its Activity. Starting for and finishing with a result is the mechanism for communication between Activities - The Activities can then delegate any necessary information to their Fragments.


If you wish, there are some methods for communication between Fragments,

setTargetFragment(Fragment fragment, int requestCode)getTargetFragment()getTargetRequestCode()

You can callback using these.

Fragment invoker = getTargetFragment();if(invoker != null) {    invoker.callPublicMethod();}


Recently, Google has just added a new ability to FragmentManager which made the FragmentManager be able to act as a central store for fragment results. We can pass the data back and forth between Fragments easily.

You can out the blog post that I've made https://oozou.com/blog/starting-a-fragment-for-results-in-android-46

Starting fragment.

override fun onCreate(savedInstanceState: Bundle?) {    super.onCreate(savedInstanceState)    // Use the Kotlin extension in the fragment-ktx artifact    setResultListener("requestKey") { key, 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...    }}

A Fragment that we want the result back.

button.setOnClickListener {    val result = "result"    // Use the Kotlin extension in the fragment-ktx artifact    setResult("requestKey", bundleOf("bundleKey" to result))}

The snippet is taken from Google's official documents.https://developer.android.com/training/basics/fragments/pass-data-between#kotlin

At the date of this answer written, this feature is still in alpha state. You can try it out using this dependency.

androidx.fragment:fragment:1.3.0-alpha05