Tôi có 2 hoạt động: Chính và Danh sách.
Từ Chính, bạn có thể mở Danh sách; từ Danh sách bạn có thể mở Chính.
Tôi muốn nó để mọi lần mở Danh sách không bị lưu vào 'lịch sử'. Vì vậy, nhấn lại từ Chính không thể trở lại Danh sách.
Nó có khả thi không?
Tôi có 2 hoạt động: Chính và Danh sách.
Từ Chính, bạn có thể mở Danh sách; từ Danh sách bạn có thể mở Chính.
Tôi muốn nó để mọi lần mở Danh sách không bị lưu vào 'lịch sử'. Vì vậy, nhấn lại từ Chính không thể trở lại Danh sách.
Nó có khả thi không?
Câu trả lời:
Khi bắt đầu danh sách của bạn Activity, hãy đặt Intentcờ của nó như sau:
Intent i = new Intent(...); // Your list's Intent
i.setFlags(i.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); // Adds the FLAG_ACTIVITY_NO_HISTORY flag
startActivity(i);
Các FLAG_ACTIVITY_NO_HISTORYcờ giữ mới Activitytừ được thêm vào lịch sử stack.
NB: Như @Sam đã chỉ ra, bạn có thể sử dụng i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);thay thế. Không có sự khác biệt về chức năng.
Intentlá cờ nào nói rằng "chỉ thêm vào lịch sử nếu không trở lại Activitynguồn gốc".
Trong tệp kê khai, hãy thêm:
android:noHistory="true"
cho hoạt động mà bạn không muốn giữ trên ngăn xếp.
Sử dụng nhiệm vụ mới với xóa. Điều này hoạt động trong trường hợp của tôi khi các tùy chọn khác không.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
Xóa toàn bộ ngăn xếp lịch sử và bắt đầu một hoạt động mới trên Android
Có vẻ như, nếu bạn gọi finish () trên hoạt động của mình ngay sau khi bạn mở một hoạt động khác, thì hoạt động đã kết thúc sẽ bị xóa khỏi ngăn xếp.
ví dụ:
Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
Trong trường hợp cụ thể của tôi FLAG_ACTIVITY_NO_HISTORYđã không hoạt động. Không FLAG_ACTIVITY_NEW_TASKhoặc FLAG_ACTIVITY_CLEAR_TASKmột mình họ làm việc.
Tuy nhiên FLAG_ACTIVITY_NEW_TASKvà FLAG_ACTIVITY_CLEAR_TASKcùng nhau đã làm việc.
Intent intent = new Intent(FooActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
Chỉ muốn thêm một cách để thực hiện việc này trong Kotlin:
val i = Intent(this, LogInActivity::class.java)
startActivity(i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK))
Intent(this, MainActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) }.also { startActivity(it) }
Câu trả lời muộn, nhưng thêm một số chiều sâu cho các câu trả lời khác. Tất cả là do bạn muốn điều gì xảy ra với các hoạt động khác bắt đầu từ hoạt động đó
Tùy chọn 1 - Chỉ một hoạt động này sẽ không có lịch sử hoạt động gọi điện
Sau đó, chỉ cần làm:
Intent i = new Intent(...);
i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);
Tùy chọn 2 - Tất cả các hoạt động bắt đầu từ hoạt động cụ thể đó không được có lịch sử
Sau đó, thêm vào tệp kê khai của hoạt động gọi:
android:noHistory="true"
Nhưng nếu bạn muốn có lịch sử trong hoạt động mới, thì bạn phải xóa cờ theo cách thủ công:
Intent i = new Intent(...);
i.removeFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);
Hy vọng rằng rõ ràng các câu trả lời khác :)
Hãy thử FLAG_ACTIVITY_CLEAR_TOP nếu hoạt động đã chạy:
Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
thêm cờ FLAG_ACTIVITY_NEW_TASKvào của bạnIntent
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK
Bạn có thể không ghi đè nút quay lại trên hoạt động cụ thể để dừng chức năng 'quay lại' không?
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.onKeyDown(keyCode, event);
}
Activityhành động không tốt.
OnBackPressedcho điều đó.
finish()ngay sau đóstartActivity(...). Bằng cách đó, nếu người dùng nhấn QUAY LẠI từ 'chính' sẽ không có gì để quay lại.