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?

1voto

kuzdu Punkte 6371

Wenn Sie Datenbindung verwenden, holen Sie sich Ihren Kontext einfach mit

binding.root.context

Damit war mein Problem gelöst.

1voto

Musthafa Punkte 251

Da das Hinzufügen von Flags die event_flow y stack_history ist es besser, den "Anwendungskontext" an die Nicht-Aktivität zu übergeben, von der aus Sie eine Aktivitätsklasse auf folgende Weise aufrufen müssen:

"ActivityClassName.this" (Wenn Sie den Kontext auf diese Weise übergeben, enthält er alle Details und Informationen, die Sie benötigen, um eine Activity aus einem Nicht-Activity-Szenario aufzurufen)

Es ist also nicht nötig, Flags zu setzen oder hinzuzufügen, das funktioniert in jedem Fall.

0voto

Chandan Lal Punkte 17
Intent i= new Intent(context, NextActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);

0voto

Sazzad Hissain Khan Punkte 33230

Kotlin-Version

val intent = Intent(Intent.ACTION_EDIT, ContactsContract.Profile.CONTENT_URI)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
this.startActivity(intent)

0voto

Rafael Ruiz Muñoz Punkte 5105

Meine Situation war ein wenig anders, ich teste meine Anwendung mit Espresso und ich musste meine Aktivität mit ActivityTestRule von der Instrumentierung Context (die nicht von einer Activity ).

fun intent(context: Context) = 
    Intent(context, HomeActivity::class.java)
        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

Ich musste die Flaggen ändern und eine or bitweise ( | in Java) mit Intent.FLAG_ACTIVITY_NEW_TASK

Daraus ergibt sich:

fun intent(context: Context) = 
    Intent(context, HomeActivity::class.java)
        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)

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