Tôi đã không thử nó bản thân mình, nhưng tôi nghĩ rằng lựa chọn tốt nhất sẽ được cấu trúc lại ứng dụng của bạn sử dụng một chồng Fragment
s trong một đơn Activity
(vì bạn có thể sau đó dễ dàng quản lý các backstack sử dụng được cung cấp addToBackStack()
và popBackStack()
phương pháp). Về cơ bản, điều này liên quan đến việc di chuyển hầu hết mã trong Activity của bạn thành một Fragment và sau đó thêm mã thao tác backstack vào Activity). Bạn có thể xem mã cho FragmentBreadCrumbs
(với API 11+) hoặc mã cho HanselAndGretel (để sử dụng với thư viện tương thích) để xem cách thực hiện điều này.
Tuy nhiên, nếu bạn muốn tiếp tục sử dụng phương pháp đa hoạt động hiện tại của mình, sau đây là một số mã tôi đã đưa ra để minh họa cách bạn có thể thực hiện việc này.
Đầu tiên, thêm một số lớp bên trong để đặt bí danh Hoạt động hiện tại của bạn và đặt các lớp này thành danh sách chuỗi (chú ý phương pháp đơn giản getSequencedActivityIntent()
mà tôi đã viết). mỗi lớp trong chuỗi có giá trị thẻ tùy ý?):
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
}
Đừng quên thêm mục nhập vào AndroidManifest của bạn.tập tin xml quá (singleTop
là tùy chọn - nó sẽ ngăn chặn các trường hợp Hoạt động trong ngăn xếp được tạo ra một lần nữa khi đưa trở lại phía trước):
<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" />
Bây giờ, bất cứ khi nào bạn cần để bắt đầu một "top" mới thể hiện của Hoạt động của bạn, bạn có thể làm điều gì đó như:
final Intent intent = getSequencedActivityIntent(+1);
if (intent == null) return;
intent.putExtra("dataset", dataSet);
startActivity(intent);
Và khi bạn cần phải quay trở lại một trong những ví dụ trong backstack bạn có thể làm:
final Intent intent = getSequencedActivityIntent(- stepBack);
if (intent == null) return;
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
nếu A và E giống nhau, thay vì gọi E tại sao bạn không gọi hoạt động A từ lịch sử ?? – Ishtiaq
Tôi đã chỉnh sửa câu hỏi của mình để làm rõ hơn. Tất cả các hoạt động đều có cùng lớp. – Warlock
Tôi không thể hiểu được vấn đề của bạn. Vui lòng cho tôi biết, điều gì là xấu? –