Ответ 1
да, с актом:
((Activity) ctx).finish();
Если у меня есть ссылка на контекст, можно ли завершить текущую деятельность? У меня нет ссылки на текущую деятельность.
да, с актом:
((Activity) ctx).finish();
В моем случае после работы
Мне нужно закончить свою деятельность в AsyncTask onPostExcute().
Где мой класс AsyncTask - это отдельный публичный класс, который имеет конструктор с параметром Context.
((Activity)(mContext)).finish();
Только это работало для меня... Во всяком случае, я получил эту идею от ответов @2red13 и @lucy... Спасибо всем...
Я знаю это старое сообщение, но, возможно, было бы неплохо назвать это так:
if(context instanceof Activity){
((Activity)context).finish(); }
Таким образом, мы не получаем никаких ненужных ClassCastExceptions
В последней версии Android я использовал finish()
;
Если у вас есть доступ к запущенному представлению Activity, которое вы хотите завершить (например, вы находитесь в прослушивателе кликов), вы можете сделать:
((Activity)getContext()).finish();
(спасибо 2red13, чтобы получить меня здесь).
Если вы запустите действие, используя:
startActivityForResult(i, 1);
вы можете вызвать finishActivity (1), чтобы завершить любые действия, запущенные с помощью этого кода запроса, например:
((Activity)getContext()).finishActivity(1);
В моем случае мне нужно использовать его в обработчике postDelayed. Используя это, вы можете быть уверены в том, какую деятельность вы заканчиваете. Надеюсь, это поможет!
У меня была такая же проблема при закрытии активности предпочтений. Вот что я сделал:
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();
}
}
Try:
((Activity) context.getApplicationContext()).finish();