当您仅对上下文有引用时,请关闭当前活动


Answers:


233

是的,使用强制转换:

((Activity) ctx).finish();

2
仅当它是当前活动时,否则非当前活动将完成:)
ernazm 2011年

3
如果Context实际上是应用程序上下文,则可能导致问题。
user634618 2011年

1
如果上下文是应用程序上下文,该怎么办。我正在一个类中运行计时器线程,并且如果时间结束,我想关闭该类的当前活动。。–
Sando

我在onPostExecute()中使用了相同的方法。我想关闭当前活动,但是它将是动态的。我正在从任何Activity调用AsyncTask并获取类广播异常。任何帮助。
Chandra Kiran

2
我没问题。如果是应用程序上下文,则classcastexception将强制关闭您的应用程序,并使用它完成所有活动!
德米特斯(Dmiters)2015年

13

就我而言,以下方法有效

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

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

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

只有以上这些对我有用...总之我从@ 2red13和@lucy答案中得到了这个主意...感谢所有人...


这是现在的不同形式((Activity) mContext).finish()
xyz 2015年

13

我知道这是一篇旧文章,但也许​​这样称呼可能是一个好主意:

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

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


2

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

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

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


1

如果您使用以下方法启动活动:

startActivityForResult(i, 1);

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

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

就我而言,我需要在处理程序postDelayed中使用一个。使用此工具,您可以确定要完成的活动。希望能帮助到你!


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

-3

尝试:

((Activity) context.getApplicationContext()).finish();

7
不要使用此“解决方案”!您无法猜测(而且您可能总是错的)您的Application上下文与Activity相同。
marciowb 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.