Si j'ai une référence à Context
, est-il possible de terminer l'activité en cours?
Je n'ai pas la référence à l'activité en cours.
oui, avec un casting:
((Activity) ctx).finish();
Je sais que c'est un ancien post, mais peut-être que ce serait une bonne idée de l'appeler ainsi:
if(context instanceof Activity){
((Activity)context).finish(); }
De cette façon, nous nous assurons de ne pas avoir d’exceptions de ClassCastExar inutiles.
Dans mon cas, la suite a fonctionné,
Je dois terminer mon activité dans une tâche asynchrone onPostExcute ().
Où ma classe AsyncTask est une classe publique distincte, qui a un constructeur avec le paramètre de contexte.
((Activity)(mContext)).finish();
Seulement ce qui précède a fonctionné pour moi ... Quoi qu'il en soit, j'ai eu cette idée de @ 2red13 et @lucy répond ... Merci à tous ...
Si vous démarrez l'activité à l'aide de:
startActivityForResult(i, 1);
vous pouvez appeler finishActivity (1) pour terminer toutes les activités lancées avec ce code de requête, comme ceci:
((Activity)getContext()).finishActivity(1);
Dans mon cas, je dois en utiliser un dans un gestionnaire postDelayed. En utilisant cela, vous pouvez être sûr de l'activité que vous terminez. J'espère que ça aide!
Si vous avez accès à la vue en cours de l'activité que vous souhaitez terminer (par exemple, vous êtes dans un écouteur de clic), vous pouvez procéder comme suit:
((Activity)getContext()).finish();
(Merci à 2red13 de m'avoir amené ici).
J'ai eu le même problème lors de la fermeture d'une activité de préférence. Voici ce que j'ai fait:
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();
}
}