Fragment Transaktionen mit Übergang – Einzigartige Übergangsnamen sind erforderlich

Ich möchte von einer OnClickListener zur Detailansicht gehen und deshalb verwende ich folgendes OnClickListener in meiner Liste:

 @Override public void onClick(View view) { Bet bet = (Bet)view.getTag(); FragmentManager fm = getActivity().getSupportFragmentManager(); BetDetailFragment f = BetDetailFragment.create(bet); String tag = f.getClass().getName(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move)); f.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move)); } FragmentTransaction ft = fm.beginTransaction() .replace(R.id.frame_container, f, tag) .addToBackStack(tag); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Ld(this, "TRANS: " + TransitionUtil.getTransitionNameBetLogo1(bet) + "|" + view.findViewById(R.id.ivLogo1)); Ld(this, "TRANS: " + TransitionUtil.getTransitionNameBetLogo2(bet) + "|" + view.findViewById(R.id.ivLogo2)); ft.addSharedElement(view.findViewById(R.id.ivLogo1), "1");//TransitionUtil.getTransitionNameBetLogo1(bet)); ft.addSharedElement(view.findViewById(R.id.ivLogo2), "2");//TransitionUtil.getTransitionNameBetLogo2(bet)); } ft.commit(); } 

Meine Funktionen geben einzigartige Namen zurück, ich habe zwei verschiedene Ansichten, aber trotzdem funktioniert es nicht. Ich habe schon unnötige Funktionen kommentiert und einige eindeutige Transaktionsnamen dort von Hand geschrieben … Aber trotzdem bekomme ich diese Ausnahme in der Zeile des ersten addSharedElement :

 java.lang.IllegalArgumentException: Unique transitionNames are required for all sharedElements at android.support.v4.app.BackStackRecord.addSharedElement 

BEARBEITEN

Ohne die gemeinsamen Elemente funktioniert alles ganz gut …

  • Ormlite Android Bulk-Einsätze
  • Fragment wird nicht angezeigt, wenn add () -Methode aufgerufen wird
  • FragmentTransaction .attach und .detach für Actionbar-Tabs
  • Android - wann man db.setTransactionSuccessful () anruft?
  • BeginTransaction (), endTransaction () und setTransactionSuccessful (). Was genau machen sie?
  • Beste Weg zum Einfrieren und Anwendung während der Datenbank macht einige schwere Hintergrundarbeit?
  • Animieren von Fragmenten und dem Rückenstapel
  • SQLite-Inserts werden auch bei Transaktionen langsamer
  • 2 Solutions collect form web for “Fragment Transaktionen mit Übergang – Einzigartige Übergangsnamen sind erforderlich”

    Das Problem ist, dass addSharedElement den Transaktionsnamen der Ansicht nicht addSharedElement !

    Also in meinem Beispiel müsste ich es mit folgendem Code setzen:

     ViewCompat.setTransitionName(view.findViewById(R.id.ivLogo1), "1"); ViewCompat.setTransitionName(view.findViewById(R.id.ivLogo2), "2"); 

    VOR dem Hinzufügen dieser Ansichten zur FragmentTransaction

    Danach geht es gut und wie erwartet:

     ft.addSharedElement(view.findViewById(R.id.ivLogo1), "1"); ft.addSharedElement(view.findViewById(R.id.ivLogo2), "2"); 

    Wenn dein onClickListener Teil deines Fragments ist, nicht Eltern- Activity , dann machst du hier etwas falsch. Ihr Fragment sollte die übergeordnete Tätigkeit benachrichtigen, was es will und Activty sollte damit umgehen (dh durch das Ersetzen von Fragmenten usw.). Fragment sollte das niemals selbst machen. Auch wenn alles, was Sie brauchen, von Detailansicht zu Liste zu gehen, dann gehe ich davon aus, dass Sie Ihre Detailansicht aus dieser Liste eingegeben haben. Wenn ja, alles, was Sie brauchen, ist das letzte Element (Fragment View Fragment) aus dem Back Stack. Siehe: https://developer.android.com/reference/android/app/FragmentManager.html

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.