android – Finishing current activity from a fragment-ThrowExceptions

Exception or error:

I have a fragment in an activity that I am using as a navigation drawer. It contains buttons that when clicked start new activities (startActivity from a fragment simply calls startActivity on the current activity).

For the life of me I can’t seem to figure out how I would finish the current activity after starting a new one.

I am looking to achieve something like this in the fragment:

public void onClick(View view) {
    // TODO Auto-generated method stub
    if (view == mButtonShows) {
        Intent intent = new Intent(view.getContext(), MyNewActivity.class);

But it seems Fragment.class does not implement finish() (like it implements startActivity(…)).

I would like the activity backstack cleared when they launch the 2nd activity. (so pressing back from the new activity would technically drop them back to the launcher)

How to solve:

When working with fragments, instead of using this or refering to the context, always use getActivity(). You should call


to finish your activity from fragment.


Well actually…

I wouldn’t have the Fragment try to finish the Activity. That places too much authority on the Fragment in my opinion. Instead, I would use the guide here:

Have the Fragment define an interface which the Activity must implement. Make a call up to the Activity, then let the Activity decide what to do with the information. If the activity wishes to finish itself, then it can.


As mentioned by Jon F Hancock, this is how a fragment can ‘close’ the activity by suggesting the activity to close. This makes the fragment portable as is the reason for them. If you use it in a different activity, you might not want to close the activity.

Code below is a snippet from an activity and fragment which has a save and cancel button.


public class PlayerActivity extends Activity 
    implements PlayerInfo.PlayerAddListener {

    public void onPlayerCancel() {
       // Decide if its suitable to close the activity, 
       //e.g. is an edit being done in one of the other fragments?

PlayerInfoFragment, which contains an interface which the calling activity needs to implement.

public class PlayerInfoFragment extends Fragment {
   private PlayerAddListener callback; // implemented in the Activity

   public void onAttach(Activity activity) {
     callback= (PlayerAddListener) activity;

   public interface PlayerAddListener {
       public void onPlayerSave(Player p); // not shown in impl above
       public void onPlayerCancel();

   public void btnCancel(View v) {
      callback.onPlayerCancel(); // the activity's implementation


Very simple…

1- just grab activity by getActivity() in the fragment

2- then call finish();

So just getActivity().finish(); will finish the parent activity.


In Fragment use getActivity.finishAffinity()


It will remove all the fragment which pushed by the current activity from the Stack with the Activity too…


Every time I use finish to close the fragment, the entire activity closes. According to the docs, fragments should remain as long as the parent activity remains.

Instead, I found that I can change views back the the parent activity by using this statement:

This returns me back to the parent activity.

I hope that this helps someone else who may be looking for this.


You should use getActivity() method in order to finish the activity from the fragment.



Try this. There shouldn’t be any warning…

            Activity thisActivity = getActivity();
            if (thisActivity != null) {
                startActivity(new Intent(thisActivity, yourActivity.class)); // if needed


try to use this

yes Fragment.class does not implement finish()

When working with fragments, instead of using this or refering to the context, always use getActivity(). You should call

Leave a Reply

Your email address will not be published. Required fields are marked *