Finishing current activity from a fragment

前端 未结 11 1494
野的像风
野的像风 2020-12-13 02:02

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 ca

相关标签:
11条回答
  • 2020-12-13 02:16

    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

    0 讨论(0)
  • 2020-12-13 02:18

    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.

    PlayerActivity

    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?
           finish();
        }
    }
    

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

    public class PlayerInfoFragment extends Fragment {
       private PlayerAddListener callback; // implemented in the Activity
    
       @Override
       public void onAttach(Activity activity) {
         super.onAttach(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
       }
    }
    
    0 讨论(0)
  • 2020-12-13 02:18

    In Fragment use getActivity.finishAffinity()

    getActivity().finishAffinity();
    

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

    0 讨论(0)
  • 2020-12-13 02:21

    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: http://developer.android.com/training/basics/fragments/communicating.html

    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.

    0 讨论(0)
  • 2020-12-13 02:27

    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: setContentView(R.layout.activity_main);

    This returns me back to the parent activity.

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

    0 讨论(0)
  • 2020-12-13 02:27

    Very simple...

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

    2- then call finish();

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

    0 讨论(0)
提交回复
热议问题