Close the current activity when you only have a reference to Context

前端 未结 7 1634
暗喜
暗喜 2020-12-12 23:47

If I have a reference to Context, is it possible to finish the current activity?

I don\'t have the reference to current activity.

相关标签:
7条回答
  • 2020-12-12 23:50

    I know it's an old post but, perhaps it could be a good idea to call it this way:

    if(context instanceof Activity){
                    ((Activity)context).finish(); }
    

    This way we make sure we don't get any unnecesary ClassCastExceptions

    0 讨论(0)
  • 2020-12-12 23:52

    If you start the activity using:

    startActivityForResult(i, 1);
    

    you can call finishActivity(1) to finish any activities started with that request code, like this:

    ((Activity)getContext()).finishActivity(1);
    

    In my case I need to use one in a handler postDelayed. Using this you can be sure of which activity you are finishing. Hope it helps!

    0 讨论(0)
  • 2020-12-12 23:54

    If you have access to the running view of the Activity you want to finish (for example, you are in a click listener), you could do:

    ((Activity)getContext()).finish();
    

    (With thanks to 2red13 to get me here).

    0 讨论(0)
  • 2020-12-12 23:59

    Try:

    ((Activity) context.getApplicationContext()).finish();
    
    0 讨论(0)
  • 2020-12-13 00:03

    In my Case following worked,

    I need to finish my activity in a AsyncTask onPostExcute().

    Where my AsyncTask class is separate public class , which has a constructor with param of Context.

    ((Activity)(mContext)).finish();
    

    Only the above worked for me... Anyway I got this idea from @2red13 and @lucy answers... Thanks to all...

    0 讨论(0)
  • 2020-12-13 00:05

    I had the same problem when closing a preference activity. Here is what I did:

    public class T2DPreferenceActivity extends PreferenceActivity {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
              getFragmentManager().beginTransaction().replace(android.R.id.content,
                    new T2DPreferenceFragment()).commit();
        }
    
        public static class T2DPreferenceFragment extends PreferenceFragment {
            @Override
            public void onCreate(final Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                addPreferencesFromResource(R.xml.server_screen_preference);
                Preference testServicePreference = getPreferenceScreen().findPreference("PREFERRED SERVER");
                testServicePreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                    @Override
                    public boolean onPreferenceChange(Preference preference, Object newValue) {
                        T2DPreferenceActivity.closeActivity(getActivity());
                        return true; //returning true still makes the activity handle the change to preferences
                    }
                });
            }
    
            public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
                super.onViewCreated(view, savedInstanceState);
                ListView lv = (ListView)view.findViewById(android.R.id.list);
                ViewGroup parent = (ViewGroup)lv.getParent();
                parent.setPadding(0, 100, 0, 0);
            }
        }
    
        protected static void closeActivity(Activity activity) {
            activity.finish();
        }
    }
    
    0 讨论(0)
提交回复
热议问题