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?

707voto

Alex Volovoy Punkte 66760

Entweder

  • das Context-Objekt über den Konstruktor in Ihrem Adapter zwischenspeichern, oder
  • es aus Ihrer Sicht zu sehen.

Oder als letzter Ausweg,

  • FLAG_ACTIVITY_NEW_TASK-Flag zu Ihrem Intent hinzufügen:

_

myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Bearbeiten - ich würde es vermeiden, Flaggen zu setzen, da dies den normalen Ablauf des Ereignis- und Verlaufsstapels stören würde.

130voto

Bruno Bieri Punkte 8713

Sie können es erreichen mit addFlags 代わりに setFlags

myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Nach Angaben der Dokumentation es tut:

Hinzufügen zusätzlicher Flags zum Intent (oder mit vorhandenem Flags-Wert).


EDIT

Achten Sie bei der Verwendung von Flags darauf, dass Sie den Verlaufsstapel als Alex Volovoy's Antwort dice:

...vermeiden Sie das Setzen von Flags, da dies den normalen Ablauf des Ereignis- und Verlaufsstapels stören würde.

81voto

Jeffrey Nyauke Punkte 1168

Anstelle der Verwendung von (getApplicationContext) utilice YourActivity.this

67voto

sanath_p Punkte 2106

Wenn Sie eine Fehlermeldung erhalten, weil Sie die Auswahlbox wie unten beschrieben verwenden:

Intent sharingIntent = new Intent(Intent.ACTION_VIEW);
sharingIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sharingIntent.setData(Uri.parse("http://google.com"));
startActivity(Intent.createChooser(sharingIntent, "Open With"));

Setzen Sie das Flag, um eine Auswahl zu erstellen, wie folgt:

Intent sharingIntent = new Intent(Intent.ACTION_VIEW);
sharingIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sharingIntent.setData(Uri.parse("http://google.com"));

Intent chooserIntent = Intent.createChooser(sharingIntent, "Open With");
chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(chooserIntent);

16voto

djdance Punkte 2970

Außerdem: Wenn Sie Links in der Listenansicht in Fragment nicht wie folgt erstellen

adapter = new ListAdapter(getActivity().getApplicationContext(),mStrings);

rufen Sie stattdessen

adapter = new ListAdapter(getActivity(),mStrings);

Der Adapter funktioniert in beiden Fällen gut, aber die Links funktionieren nur im letzten Fall.

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