Vraag Hoe IntentCompat.makeRestartActivityTask () gebruiken?


Ik probeer een knop te implementeren die ertoe leidt dat mijn app teruggaat naar de eerste activiteit en zich gedraagt ​​alsof hij (bijna) opnieuw is opgestart. Deze code

Intent newIntent =
        new Intent(currentActivity.getApplicationContext(), StartActivity.class);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK + Intent.FLAG_ACTIVITY_CLEAR_TASK);
currentActivity.startActivity(newIntent);

lijkt goed te werken voor een nieuwere tablet met Android 4.1, maar deze werkt niet op een ouder apparaat met Android 2.3.4.

Ik heb hier een paar discussies over gevonden:

Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK werkt niet op Android

Alle activiteiten in een taak wissen?

Het lezen van de kleine lettertjes doet me geloven dat ik de IntentCompat-klasse in Android-ondersteuning-v4.jar zou moeten gebruiken, http://developer.android.com/reference/android/support/v4/content/IntentCompat.html

Helaas bevat de documentatie geen voorbeelden en ik weet niet goed hoe ik IntentCompat moet gebruiken. Het enige voorbeeld dat ik heb gevonden is dit: Start MainActivity niet met Android 2.3

wat me doet geloven dat ik zoiets als dit zou moeten doen:

    Intent newIntent = IntentCompat.makeRestartActivityTask(cn);

Maar dit geeft me een compileerfout door te zeggen dat "makeRestartActivityTask" een ongedefinieerd symbool is.

Ik vermoed dat dit impliceert dat ik android-support-v4.jar niet correct heb toegevoegd aan mijn build-omgeving (IntelliJ IDEA 12-communityeditie), maar ik heb dat op verschillende manieren geprobeerd en het werkt nog steeds niet .

Dus ik heb twee vragen:

  1. Lijkt mijn poging tot gebruik van IntentCompat correct?

  2. Hoe krijg ik dat de compiler stopt met te zeggen dat "makeRestartActivityTask" een ongedefinieerd symbool is?


10
2017-10-04 13:18


oorsprong


antwoorden:


Dit is hoe ik IntentCompat gebruik

    Intent intentToBeNewRoot = new Intent(this, MainActivity.class);
    ComponentName cn = intentToBeNewRoot.getComponent();

    Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);

    startActivity(mainIntent);

Dit vervangt effectief mijn niet-langer gewenste taakroot met MainActivity. Het werkt in Gingerbeard en ICS. Ik heb het bericht "is een niet-gedefinieerd symbool" niet gezien.


20
2017-10-11 09:28



Bijwerken

Google heeft de methode verwijderd IntentCompat.makeRestartActivityTask() in de huidige versies van de ondersteuningsbibliotheek. In plaats daarvan kunt u gewoon de gewone Android API gebruiken:

ComponentName cn = intent.getComponent();
Intent.makeRestartActivityTask(cn);

Ik hoop dat dit iemand tijd bespaart om naar alternatieven te zoeken;)


17
2018-01-21 22:19