Search code examples
androidkotlinlistener

Set listener in fragment after pressing back button on activity


So I have MyFragment from where I start MyActivity on a button click. Once I'm on the activity and I want to go back to my fragment I want to announce the fragment that I just came from that activity and display a banner.

Here is my activity :

class MyActivity : AppCompatActivity() {
   private var onBackButtonClickListener: OnBackButtonClickListener? = null

    ...

    backBtn.setOnClickListener {
       this.onBackPressed()
       onBackButtonClickListener?.onBackButtonClick()
    }

    ...

    fun setOnBackButtonClick(onBackButtonClickListener: OnBackButtonClickListener) {
        this.onBackButtonClickListener = onBackButtonClickListener
    }

    interface OnBackButtonClickListener {
       fun onBackButtonClick()
    }
}

Here is my fragment that implements the activity interface :

public class MyFragment extends Fragment implements MyActivity.OnBackButtonClickListener {
   ....

   @Override
    public void onBackButtonClick() {
       //show banner
   }
     

My question is: how do my fragment know that I just came from that specific activity? Where do I set the onClickListener inside the fragment? I've been looking for a solution for the past 2 days and did not find anything that works.


Solution

  • This is not a good way to handle this situation. A good way can be as following:

    Start activity for result from your fragment

    startActivityForResult(intent, REQUEST_CODE)
    

    And override onActivityResult() in your fragment.

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if(resultCode == AppCompatActivity.RESULT_OK && requestCode == REQUEST_CODE) {
            showBanner()     // <---- show banner or do your task here
        }
        super.onActivityResult(requestCode, resultCode, data)
    }
    

    This will get called when your're back from the activity.

    On your activity

    backBtn.setOnClickListener {
       setResult(AppCompatActivity.RESULT_OK)
       this.onBackPressed()
    }