Schließen Sie die aktuelle Aktivität, wenn Sie nur einen Verweis auf Kontext haben


Antworten:


233

ja, mit einer Besetzung:

((Activity) ctx).finish();

2
Nur wenn es die aktuelle Aktivität ist, sonst wird die nicht aktuelle Aktivität beendet :)
ernazm

3
Dies kann zu Problemen führen, wenn Contextes sich tatsächlich um einen Anwendungskontext handelt.
user634618

1
Wie mache ich das, wenn der Kontext ein Anwendungskontext ist? Ich führe einen Timer-Thread in einer Klasse aus und wenn die Zeit abgelaufen ist, möchte ich die aktuelle Aktivität dieser Klasse schließen.
Sando

Ich habe dasselbe in meinem onPostExecute () verwendet. Ich möchte die aktuelle Aktivität schließen, aber sie wird dynamisch sein. Ich rufe AsyncTask von einer der Aktivitäten aus auf und erhalte eine Classcast-Ausnahme. irgendeine Hilfe.
Chandra Kiran

2
Ich sehe keine Probleme. Wenn es sich um einen Anwendungskontext handelt, erzwingt eine Klassenkastenausnahme das Schließen Ihrer App und beendet alle Aktivitäten damit!
Dmiters

13

In meinem Fall hat folgendes funktioniert,

Ich muss meine Aktivität in einer AsyncTask onPostExcute () beenden.

Wobei meine AsyncTask-Klasse eine separate öffentliche Klasse ist, die einen Konstruktor mit dem Parameter Context hat.

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

Nur das oben Genannte hat bei mir funktioniert ... Wie auch immer, ich habe diese Idee von @ 2red13 und @lucy Antworten bekommen ... Danke an alle ...


Dies ist jetzt in einer anderen Form ((Activity) mContext).finish().
XYZ

13

Ich weiß, dass es ein alter Beitrag ist, aber vielleicht könnte es eine gute Idee sein, ihn so zu nennen:

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

Auf diese Weise stellen wir sicher, dass wir keine unnötigen ClassCastExceptions erhalten


2

Wenn Sie Zugriff auf die laufende Ansicht der Aktivität haben, die Sie beenden möchten (z. B. befinden Sie sich in einem Klick-Listener), können Sie Folgendes tun:

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

(Danke an 2red13, um mich hierher zu bringen).


1

Wenn Sie die Aktivität starten mit:

startActivityForResult(i, 1);

Sie können finishActivity (1) aufrufen, um alle mit diesem Anforderungscode gestarteten Aktivitäten wie folgt abzuschließen:

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

In meinem Fall muss ich einen in einem Handler postDelayed verwenden. Auf diese Weise können Sie sicher sein, welche Aktivität Sie beenden. Ich hoffe es hilft!


-1

Ich hatte das gleiche Problem beim Schließen einer Präferenzaktivität. Folgendes habe ich getan:

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

Versuchen:

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

7
Verwenden Sie diese "Lösung" nicht! Sie können nicht erraten (und wahrscheinlich liegen Sie immer falsch), dass Ihr Anwendungskontext mit Ihrer Aktivität identisch ist.
Marciowb
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.