85

如果我有参考Context,是否可以完成当前活动?

我没有对当前活动的参考。

4

7 回答 7

246

是的,有演员表:

((Activity) ctx).finish();
于 2011-03-21T11:07:46.077 回答
14

在我的案例中,以下工作,

我需要在 AsyncTask onPostExcute() 中完成我的活动。

我的 AsyncTask 类是单独的 public class ,它有一个带有 Context 参数的构造函数。

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

只有以上对我有用......无论如何我从@2red13 和@lucy 的答案中得到了这个想法......谢谢大家......

于 2012-12-20T14:33:59.300 回答
14

我知道这是一篇旧帖子,但也许这样称呼它可能是个好主意:

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

这样我们确保我们不会得到任何不必要的 ClassCastExceptions

于 2014-07-10T08:44:20.520 回答
2

如果您有权访问要完成的​​ Activity 的运行视图(例如,您在点击侦听器中),您可以执行以下操作:

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

(感谢 2red13 让我来到这里)。

于 2011-06-03T22:34:56.727 回答
0

如果您使用以下方式开始活动:

startActivityForResult(i, 1);

您可以调用 finishActivity(1) 来完成以该请求代码开始的任何活动,如下所示:

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

在我的情况下,我需要在处理程序 postDelayed 中使用一个。使用它,您可以确定您正在完成哪个活动。希望能帮助到你!

于 2015-10-07T05:19:18.333 回答
-1

关闭偏好活动时我遇到了同样的问题。这是我所做的:

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();
    }
}
于 2017-06-29T19:44:15.923 回答
-4

尝试:

((Activity) context.getApplicationContext()).finish();
于 2013-06-25T14:23:38.183 回答