overridePendingTransition non funziona quando viene utilizzato FLAG_ACTIVITY_REORDER_TO_FRONT

Ho due attività nello stack, per mostrargli che uso FLAG_ACTIVITY_REORDER_TO_FRONT. Finora così bene, il problema viene quando voglio portre l'attività con un'animation usando l'overridePendingTransition.

Intent i = new Intent(ActivityA.this, ActivityB.class); i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); ActivityA.this.startActivity(i); overridePendingTransition(R.anim.transition_to_right, R.anim.transition_to_left); 

La transizione non viene visualizzata, tuttavia, se la bandiera non viene aggiunta all'intento (rimozione della row 2), non esiste alcun problema.

  • È ansible produrre un'azione di scorrimento continuo sul touchscreen, con adb, su Android?
  • HttpClient non importerà in Android Studio
  • Gdb debug il programma nativo (non jni) su android
  • Android: creazione di due colonne in un linearlayout
  • Estendendo da due classi
  • android Custom widget per SwitchPreferenc
  • È ansible portre un'attività davanti a un'animation?

    Molte grazie!

  • Aggiorna più istanze Realm contemporaneamente?
  • Ha rifiutato di visualizzare un fotogramma perché ha impostato X-Frame-Options su 'DENY in webview web android
  • La visualizzazione di fotogrammi di anteprima di Camera2 restituisce il buffer vuoto
  • Modificare i valori da Cursor utilizzando SimpleCursorAdapter
  • Gestori di exception globali in Java
  • Impostazione di Android con OpenCV
  • 8 Solutions collect form web for “overridePendingTransition non funziona quando viene utilizzato FLAG_ACTIVITY_REORDER_TO_FRONT”

    Mi sono imbattuto in questo stesso problema. Il trucco è quello di superare la transizione nel callback onResume ().

     @Override public void onResume() { super.onResume(); overridePendingTransition(R.anim.transition_to_right, R.anim.transition_to_left); } 

    In realtà la soluzione giusta quando si utilizza REORDER_TO_FRONT è call overridePendingTransition nel metodo onNewIntent () dell'attività che si apre.

     @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } 

    sostituire con le tue transizioni.

    Se è necessario sostituire selettivamente la transizione, è ansible aggiungere un extra nella tua intenzione e controllarlo nel onNewIntent () per decidere cosa fare.

    Questo non è adatto se non si conosce la transizione che verrà aperta (se non si specifica esplicitamente per esempio) ma altrimenti è la soluzione giusta.

    chiamata

     overridePendingTransition(R.anim.transition_to_right, R.anim.transition_to_left); 

    dopo finitura (); dell'attività di chiusura lavorato per me.

     finish(); overridePendingTransition(R.anim.transition_to_right, R.anim.transition_to_left); 

    E 'meglio che call onResume, perché rende l'attività più indipendente delle animazioni entrate e uscenti:

    Chiamata dopo la fine dell'attività del mittente:

    Attività A — Entrare in transizione 1 (su A) —> Attività B — Entrare in transizione 2 (su B) —> Attività C

    Attività A <— Uscire Transizione 1 (su B) — Attività B <— Uscire Transizione 2 (su C) — Attività C

    Attività A — Entrare in transizione 1 (su A) —> Attività C — Entrare in transizione 3 (su C) —> Attività B

    Attività A <— Uscire Transizione 3 (su C) — Attività C <— Uscire Transizione 2 (su B) — Attività B

    Chiamare onResume di attività ricevitore:

    Attività A — Entrare in transizione 1 (su B) —> Attività B — Entrare in transizione 2 (su C) —> Attività C

    Attività A <— Entra in transizione 1 (su A) — Attività B <— Entra in transizione 2 (su B) — Attività C

    Attività A — Entra Transizione 3 (su C) —> Attività C — Inserisci Transizione 2 (su B) —> Attività B

    Attività A <— Entra Transizione 1 (su A) — Attività C <— Entra Transizione 3 (su C) — Attività B

    Qui l'animation onResume deve sempre essere la stessa, non import quale attività mittente sia, ma il primo approccio, in cui è ansible personalizzare facilmente l'animation.

    per me, la soluzione era assicurarsi che fosse corsa nel thread UI

     runOnUiThread(new Runnable() { public void run() { startActivity(new Intent(ActivityOne.this, ActivityTwo.class)); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } }); finish(); 

    Il mio collega ha incontrato questo problema e riuscì a risolverlo aggiungendo ad esso l'attributo minimo SDK (5 e più).

    poiché questa funzionalità era disponibile api 5, l'applicazione di un livello di sdk più elevato ha fatto il trucco per noi.

    Come creare l'animation in onCreate () o onStart () della seconda attività.

    Ho avuto lo stesso problema. Suggerisco di controllare AndroidManifest.xml per assicurarsi che ActivityA e ActivityB non dispongano di alcun Tema.Translucent.NoTitleBar impostato, questo tema contiene "android: windowIsTranslucent" = vero causa del problema.

    Spero che questo ti aiuti.

    Ho fatto qualcosa di simile e ho fatto come segue:

     private Stack<String> stack; ViewAnimator mViewAnimator; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mViewAnimator = new ViewAnimator(this); if (stack == null) stack = new Stack<String>(); push("FirstStackActivity", new Intent(this, FirstStackActivity.class)); } @Override public void finishFromChild(Activity child) { pop(); } @Override public void onBackPressed() { pop(); } public void push(String id, Intent intent) { Window window = getLocalActivityManager().startActivity(id, intent); if (window != null) { stack.push(id); View view = window.getDecorView(); mViewAnimator.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in)); mViewAnimator.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out)); mViewAnimator.addView(view); mViewAnimator.showNext(); setContentView(mViewAnimator); } } public void pop() { if (stack.size() == 1) finish(); if (stack.size() > 0) { LocalActivityManager manager = getLocalActivityManager(); Intent lastIntent = manager.getActivity(stack.peek()).getIntent(); Window newWindow = manager.startActivity(stack.peek(), lastIntent); View view = newWindow.getDecorView(); mViewAnimator.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in)); mViewAnimator.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out)); mViewAnimator.showPrevious(); mViewAnimator.removeView(view); } destroy(stack.pop()); } /** * BugFix official * @param id * @return */ public boolean destroy(String id) { final LocalActivityManager activityManager = getLocalActivityManager(); if (activityManager != null) { activityManager.destroyActivity(id, false); try { final Field mActivitiesField = LocalActivityManager.class.getDeclaredField("mActivities"); if (mActivitiesField != null) { mActivitiesField.setAccessible(true); @SuppressWarnings("unchecked") final Map<String, Object> mActivities = (Map<String, Object>) mActivitiesField.get(activityManager); if (mActivities != null) { mActivities.remove(id); } final Field mActivityArrayField = LocalActivityManager.class.getDeclaredField("mActivityArray"); if (mActivityArrayField != null) { mActivityArrayField.setAccessible(true); @SuppressWarnings("unchecked") final ArrayList<Object> mActivityArray = (ArrayList<Object>) mActivityArrayField.get(activityManager); if (mActivityArray != null) { for (Object record : mActivityArray) { final Field idField = record.getClass().getDeclaredField("id"); if (idField != null) { idField.setAccessible(true); final String _id = (String) idField.get(record); if (id.equals(_id)) { mActivityArray.remove(record); break; } } } } } } } catch (Exception e) { e.printStackTrace(); } return true; } return false; } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.