web-dev-qa-db-fra.com

Fermez l’activité en cours lorsque vous n’avez qu’une référence au contexte.

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.

61
Buda Gavril

oui, avec un casting:

((Activity) ctx).finish();
207
2red13

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.

11
Alan Poggetti

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 ...

11

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!

1
Casey Murray

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).

1
Lucy

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