如果我有一个参考 Context,是否有可能完成当前的活动?
Context
我没有当前活动的参考资料。
yes, with a cast:
((Activity) ctx).finish();
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).
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...
Try:
((Activity) context.getApplicationContext()).finish();
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
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!
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(); } }