Hvorfor FLAG_ACTIVITY_CLEAR_TOP ikke arbejde?

Som titlen siger, Hvorfor intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) eller intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) ikke vil arbejde?

Jeg har 3 Aktiviteter, lad os sige A, B og C.

Når jeg forsøger at starte En Aktivitet fra C-kode:

Intent i = new Intent(this, A.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

Det blot starter En Aktivitet, men ikke klar top.! -_-

Jeg har også prøvet at bruge setFlags().

Jeg læse forskellige spørgsmål på, SÅ om dette problem, men jeg kunne ikke finde det rigtige svar. >_<

Nogen venligst hjælpe!

Redigere

Kode for onBackPressed() i aktivitet ” A ” som krævet af @codeMagic.

@Override
public void onBackPressed(){
    if(wvLogin.canGoBack())
        wvLogin.goBack();
    else
        super.onBackPressed();
}
Sådan er det ikke klart toppen?
Hvad mener du, hvordan? Når En er lauched, ved at trykke på back-knappen og derefter skal forlade den app, men intean i dette tilfælde, C kommer til at fokusere ud fra baggrunden.
Det er præcis, hvad jeg mente med “hvordan”. Jeg har bare brug for at sikre, at din definition af, hvordan var det samme som mig før man ser på det yderligere.
Har du tilsidesætte onBackPressed() i En?
ja! men det er for webview til at gå tilbage, hvis muligt, ellers bare super.onBackPressed() !

OriginalForfatteren ashu | 2014-05-18

3 svar

  1. 35

    Fra dokumentation for FLAG_ACTIVITY_CLEAR_TOP:

    Hvis den er indstillet, og den aktivitet, der bliver lanceret, er der allerede kører på
    aktuelle opgave
    , så i stedet for at lancere en ny instans af, at
    aktivitet, som alle de andre aktiviteter på toppen af det vil være lukket, og
    denne Hensigt vil blive leveret til den (nu på toppen) gamle aktivitet som en
    nye Hensigt.

    Som du har tilføjet i din kommentar, En aktivitet er afsluttet, før du ringer til B, så denne situation ikke finder anvendelse. En ny instans af En aktivitet vil blive lanceret i stedet.

    Som jeg ser det, har du to muligheder her:

    1) Brug Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK flag. Dette vil starte En aktivitet som roden af stakken. Det virker, men alle andre aktiviteter i stakken vil være tabt. Forudsat, at A var den første aktivitet (eller i det mindste, at du ikke er interesseret i nogen tidligere aktiviteter i opgaven stack) så er det ikke ligegyldigt. Bemærk: CLEAR_TASK kræver API-Niveau 11.

    2) en Anden mulig løsning (i tilfælde af at den tidligere antagelse er ikke sandt) ville være ikke at bruge hensigt flag på alle:

    • B begynder C med startActivityForResult().
    • I stedet for at kalde A, C finish, efter at have sat et resultat for B, der angiver, at der skal iværksættes.
    • I B.afterActivityResult(), finish, B og lancere A.
    En anden mulighed ville være at lade En aktivitet i stakken (ikke ringe til slut (), når de lancerer og andre aktiviteter). Dette vil give dig mulighed for at bruge FLAG_ACTIVITY_CLEAR_TOP. Men du bliver nødt til at beskæftige sig med brugere, der er mulige Opbakning til aktiviteten A.
    hvad nu hvis jeg havde nogle flere aktiviteter inden i dette SÅ spørgsmål, og jeg var nødt til at bevare dem i stakken? NEW_TASK ikke der, right?

    OriginalForfatteren matiash

  2. 3

    Du har brugt en diferrent hensigt: du kan initialiseres:

      Intent i = new Intent(this, A.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); \\WRONG;;
      startActivity(i);

    løsning:

    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); \\RIGHT;;

    Du kan enten sætte en noHistory sandt, at den Aktivitet, En i manifestet

    android:noHistory=true
    ser ud som jeg har lavet en skrive fejl i spørgsmålet. Redigering…
    opdateret bruge en noHistory
    Hvorfor indstille noHistory til aktivitet ‘En”, når den fungerer fint? Jeg har problemer med ‘B’ & ‘C’, da de ikke bliver færdige i baggrunden!
    Tak @Rod_Algonquin
    android:noHistory=”true” var det perfekte svar, en one-liner!

    OriginalForfatteren Rod_Algonquin

  3. 3

    Du mangler Intent.FLAG_ACTIVITY_SINGLE_TOP flag

    Prøv dette:

    Intent i = new Intent(this, A.class);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(i);

    OriginalForfatteren goodKode

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *