470 Stimmen

Aufruf von startActivity() von außerhalb eines Activity-Kontextes

Ich habe eine ListView in meiner Android-Anwendung. Ich binden zu diesem ListView unter Verwendung einer benutzerdefinierten Unterklasse der ArrayAdapter Klasse. Innerhalb der überschriebenen ArrayAdapter.getView(...) Methode, weise ich eine OnClickListener . In der onClick Methode der OnClickListener Ich möchte eine neue Aktivität starten. Ich erhalte die Ausnahme:

Calling startActivity() from outside of an Activity  context requires the  
FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

Wie kann ich die Context dass die ListView (die aktuelle Activity ) arbeitet unter?

14voto

mreichelt Punkte 12129

Ich denke, dass Sie vielleicht den OnClickListener an der falschen Stelle implementieren - normalerweise sollten Sie auf jeden Fall einen OnItemClickListener in Ihrer Activity implementieren und ihn stattdessen auf die ListView setzen, sonst bekommen Sie Probleme mit Ihren Events...

12voto

Alen Lee Punkte 2389

In der Android 28(Android P) startActivity

if ((intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) == 0
        && (targetSdkVersion < Build.VERSION_CODES.N
                || targetSdkVersion >= Build.VERSION_CODES.P)
        && (options == null
                || ActivityOptions.fromBundle(options).getLaunchTaskId() == -1)) {
    throw new AndroidRuntimeException(
            "Calling startActivity() from outside of an Activity "
                    + " context requires the FLAG_ACTIVITY_NEW_TASK flag."
                    + " Is this really what you want?");
}

Am besten fügen Sie also Folgendes hinzu FLAG_ACTIVITY_NEW_TASK

Intent intent = new Intent(context, XXXActivity.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
context.startActivity(intent);

10voto

Murtaza Ashraf Punkte 190
CustomAdapter mAdapter = new CustomAdapter( getApplicationContext(), yourlist);

o

Context mContext = getAppliactionContext();
CustomAdapter mAdapter = new CustomAdapter( mContext, yourlist);

Wechsel nach unten

CustomAdapter mAdapter = new CustomAdapter( this, yourlist);

8voto

Wenn Sie einen Intent innerhalb eines Listiners in einer Methode erstellen

override onClick (View v).

dann rufen Sie den Kontext auch über diese Ansicht auf:

v.getContext ()

Es wird nicht einmal SetFlags benötigt ...

4voto

rouen Punkte 4759

Für alle, die sich das anschaffen Xamarin.Android (MonoDroid) auch wenn StartActivity von der Aktivität aus aufgerufen wird - dies ist eigentlich ein Xamarin-Bug mit der neuen ART-Runtime, siehe https://bugzilla.xamarin.com/show_bug.cgi?id=17630

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X