nie próbowałem go samodzielnie, ale myślę, że najlepszym rozwiązaniem byłoby byłaby swoją aplikację do korzystania stos Fragment
s ramach jednej Activity
(ponieważ można wtedy łatwiej zarządzać backstack pomocą dostarczone metody addToBackStack()
i popBackStack()
). Zasadniczo polega to na przeniesieniu większości kodu w Aktywności do Fragmentu, a następnie dodaniu kodu manipulacyjnego Backstack w Aktywności). Możesz spojrzeć na kod FragmentBreadCrumbs
(z API 11+) lub kod dla HanselAndGretel (do użytku z biblioteką kompatybilności), aby zobaczyć, jak można to zaimplementować.
Jeśli jednak chcesz nadal korzystać z aktualnego podejścia dla wielu działań, poniżej przedstawiono kod, który wymyśliłem, aby zilustrować, w jaki sposób możesz to zrobić.
Najpierw dodaj kilka klas wewnętrznych do aliasu bieżącej aktywności i umieść te klasy w liście sekwencji (zauważ także uproszczoną metodę, którą napisałem, możesz dodać bardziej zaawansowaną logikę, jeśli potrzebujesz - może użyć HashMap do kojarzenia każda klasa w sekwencji o dowolnej wartości znacznika):
public class MyActivity extends Activity {
public static class A extends MyActivity {}
public static class B extends MyActivity {}
public static class C extends MyActivity {}
public static class D extends MyActivity {}
public static class E extends MyActivity {}
public static class F extends MyActivity {}
public static class G extends MyActivity {}
public static class H extends MyActivity {}
public static class I extends MyActivity {}
public static class J extends MyActivity {}
private final static List<Class<?>> SEQUENCE = Arrays.asList(new Class<?>[] {
A.class, B.class, C.class, D.class, E.class,
F.class, G.class, H.class, I.class, J.class,
});
private Intent getSequencedActivityIntent(int step) {
final int current = SEQUENCE.indexOf(this.getClass());
if (current == -1) new Intent(this, SEQUENCE.get(0));
final int target = current + step;
if (target < 0 || target > SEQUENCE.size() - 1) return null;
return new Intent(this, SEQUENCE.get(target));
}
// the rest of your activity code
}
nie zapomnij dodać swoje wpisy do AndroidManifest.plik xml zbyt (singleTop
jest opcjonalna - będzie to uniemożliwić wystąpienie aktywny w stosie być ponownie utworzone podczas sprowadzony do przodu):
<activity android:name=".MyActivity$A" android:launchMode="singleTop" />
<activity android:name=".MyActivity$B" android:launchMode="singleTop" />
<activity android:name=".MyActivity$C" android:launchMode="singleTop" />
<activity android:name=".MyActivity$D" android:launchMode="singleTop" />
<activity android:name=".MyActivity$E" android:launchMode="singleTop" />
<activity android:name=".MyActivity$F" android:launchMode="singleTop" />
<activity android:name=".MyActivity$G" android:launchMode="singleTop" />
<activity android:name=".MyActivity$H" android:launchMode="singleTop" />
<activity android:name=".MyActivity$I" android:launchMode="singleTop" />
<activity android:name=".MyActivity$J" android:launchMode="singleTop" />
Teraz, kiedy trzeba rozpocząć nowy „top” instancję Twój aktywny, można zrobić coś takiego:
final Intent intent = getSequencedActivityIntent(+1);
if (intent == null) return;
intent.putExtra("dataset", dataSet);
startActivity(intent);
a kiedy trzeba wrócić do jednej instancji w backstack można zrobić:
final Intent intent = getSequencedActivityIntent(- stepBack);
if (intent == null) return;
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
jeśli A i E są takie same, zamiast wywoływania E dlaczego nie wywołujesz aktywności A z historii? – Ishtiaq
Poprawiłem moje pytanie, aby było jaśniejsze. Wszystkie zajęcia mają tę samą klasę. – Warlock
Nie mogę zrozumieć twojego problemu. Proszę powiedz mi, co jest złe? –