2012-01-24 34 views
24

Tôi thấy rằng trong ứng dụng của tôi, người dùng có thể nhận được khá 'lồng nhau' trong các hoạt động khác nhau được mở trong khi người dùng đang sử dụng ứng dụng.Có cách nào để có một và chỉ một ví dụ của mỗi hoạt động?

Ví dụ:

  1. Main Menu
  2. Danh sách Object
  3. Object Chi tiết
  4. Object Sửa
  5. Object Chi tiết
  6. Object Child Chi tiết
  7. Object Child Sửa
  8. Đối tượng Chi tiết trẻ em

Bây giờ, khi người dùng nhấn lại, nó phải đi qua 'Object Child Details' hai lần (cùng một đối tượng, khi nó được chỉnh sửa trở lại trang chi tiết) và điều tương tự cũng xảy ra cho 'Chi tiết đối tượng cha mẹ'.

Có cách nào để sử dụng lại các hoạt động, nếu chúng đã được mở trong ngăn xếp và sắp xếp lại chúng ở phía trước không? Cách duy nhất tôi đã thấy là hoạt động với thuộc tính launcher. Tôi tin rằng tôi đã thấy singleTasksingleTop.

Nếu được cho là sử dụng hai thuộc tính này, singleTasksingleTop, tôi phải sử dụng chúng như thế nào? Khi tôi cố gắng đưa chúng vào ứng dụng, nó không có sự khác biệt. Tôi cũng cần đặt cờ trong khi khởi chạy ý định bằng cách sử dụng startActivity?

Trả lời

30

trong bất động sản Hoạt động Manifest bạn có thể cho tham số này android:launchMode="singleInstance"

đọc một cách chi tiết hơn ở đây http://developer.android.com/guide/topics/manifest/activity-element.html

+6

** Không sử dụng điều này mà không hiểu tất cả các tác động của 'launchMode =" singleInstance "'. Điều này thực hiện các hoạt động _not_ _re-order_ **, bởi vì nó buộc hoạt động phải hoàn toàn trong một nhiệm vụ riêng biệt (nghĩa là nó sẽ xuất hiện riêng biệt với ứng dụng trong danh sách Ứng dụng gần đây). Vì vậy, nếu bạn làm điều này cho mọi hoạt động trong ứng dụng của mình, bạn sẽ thấy từng mục trong số đó là các mục riêng biệt trong danh sách Ứng dụng gần đây. Ít nhất đó là những gì các tài liệu nói. [Thực tế có một chút khác biệt] (https://inthecheesefactory.com/blog/understand-android-activity-launchmode/en). –

+0

Khuyến nghị của tôi là sử dụng 'Intent.FLAG_ACTIVITY_REORDER_TO_FRONT' thay vào đó (như được đề xuất trong câu trả lời của Vikram dưới đây), mặc dù nó không phải là một giải pháp hoàn hảo. –

6

Có bạn chỉ có thể yêu cầu một ví dụ về các hoạt động này được tạo, nhưng thường không được khuyến nghị. Nếu bạn chỉ quan tâm đến lịch sử, hãy xem Intent.FLAG_ACTIVITY_CLEAR_TOP.

17

Đây là lá cờ của bạn! http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_REORDER_TO_FRONT

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) 

Lưu ý 'addFlags'. Cũng lưu ý rằng, onCreate sẽ không được gọi trên Hoạt động này khi một Mục đích mới được phân phối cho nó. Nó sẽ được gửi qua onNewIntent().

Điều này không đảm bảo rằng có một phiên bản hoạt động duy nhất đang chạy. Để đảm bảo rằng, check this out: http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

0

Thêm Flags ý định như

Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP); StartActivity(srcActivity.java, DesiredActivity.class);

Sau đó, tại onPause() DesiredActivity

Thêm finish(), Điều này đã làm việc cho tôi.

14

Sử dụng android: launchMode = "singleTask" có lẽ là cách tiếp cận tốt nhất, vì nó sẽ không tạo lại hoạt động nếu nó đang chạy. Chỉ cần thêm nó vào hoạt động trong AndroidManifest.xml của bạn, và bạn sẽ được tất cả các thiết lập.

<activity 
    android:name=".MyActivity" 
    android:label="@string/app_name" 
    android:launchMode="singleTask" 
    > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

Dưới đây là một câu hỏi mà có thể có ích: Android singleTask or singleInstance launch mode?

0
Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_HISTORY); 

Nó làm việc cho tôi :)

1

này đã làm việc cho tôi.

Intent intent = new Intent(this, MyActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
startActivity(intent); 

Nếu một thể hiện của Hoạt động này đã tồn tại, sau đó nó sẽ được chuyển đến phía trước. Nếu một cá thể không tồn tại, một cá thể mới sẽ được tạo ra.

Các vấn đề liên quan