2010-07-01 7 views
6

Tôi băn khoăn là có thể tạo nhiều phiên bản của một Hoạt động trong Android?Android - Cách tạo nhiều phiên bản hoạt động?

Tôi hiện bắt đầu màn hình inCall riêng của tôi cho một thử nghiệm Voip bằng cách sử dụng đoạn mã sau:


 public void initInCallScreen(String pName, String phoneNumber, int contactID, boolean 
     callDirection, int lineID){ 

    //starts in callScreen dialog 
    final Intent myIntent = new Intent(context, CallDialogActivity.class); 
    myIntent.putExtra("NAME", pName); 
    myIntent.putExtra("NUMBER", phoneNumber); 
    myIntent.putExtra("ID", contactID); 
    myIntent.putExtra("CALLTYPE", callDirection); //True = Incoming, False = Outgoing 
    myIntent.putExtra("LINEID", lineID); 
    myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(myIntent); 

này cho phép tôi để bắt đầu tốt hoạt động.

Tuy nhiên, khi tôi gọi nó trong giây lát, nó chỉ trở lại Hoạt động đã tạo thay vì tạo Hoạt động mới và đặt nó trên ngăn xếp.

Tôi muốn để có thể tạo ra các hoạt động nhiều lần vì vậy mà tôi có hai hoặc 3 hoạt động trên stack và người dùng có thể chuyển đổi giữa chúng, sử dụng Home, Back nút vv ...

Đây có phải là có thể và nếu vậy tôi đang làm gì sai?

+0

tôi đã không thực hiện những nghiên cứu thích hợp nhưng với mô tả của bạn, tôi là gu viết rằng 'CallDialogActivity' là của chế độ khởi chạy' single top', trong trường hợp này tôi không nghĩ bạn có thể làm được gì nhiều. nếu điều này không được chỉ định rõ ràng, nó sẽ mặc định cho hành vi mà bạn đang yêu cầu ... –

+0

Có cách nào để kiểm tra xem đó có phải là đầu duy nhất không? –

+0

@DonalRafferty là bạn có thể giải quyết vấn đề này ..? –

Trả lời

7

Tuy nhiên khi tôi gọi nó là trong một giây nó chỉ trở về Hoạt động đã tạo chứ không phải là tạo ra một Hoạt động mới và đặt nó trên stack.

Bạn có thể đã thay đổi tệp kê khai của mình để thêm thuộc tính android:launchMode đang gây trở ngại cho mục tiêu của bạn. Theo mặc định, bắt đầu một hoạt động bắt đầu một phiên bản mới.

Ngoài ra:

  • Loại bỏ myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);, vì bạn không muốn có một nhiệm vụ mới dựa trên những gì bạn đã viết ở đây
  • Kể từ context có lẽ là một Context, tôi không biết tại sao bạn đang đi qua tất cả những thứ ContextWrapper/getBaseContext()
+0

Xin lỗi, di chuyển mã cũ vào một dự án mới, cảm ơn vì đã chỉ ra ngữ cảnh. Khi tôi xóa myIntent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); Tôi nhận được lỗi sau khi cố gắng bắt đầu Hoạt động: AndroidRuntimeException: Gọi startActivity() từ bên ngoài ngữ cảnh Hoạt động yêu cầu cờ FLAG_ACTIVITY_NEW_TASK. Đây thực sự là những gì bạn muốn? Vì vậy, tôi không chắc chắn nhưng tôi nghĩ rằng tôi cần cờ FLAG_ACTIVITY_NEW_TASK được đặt? Ngoài ra, không có cài đặt launchMode ở bất kỳ đâu trong tệp kê khai của tôi. –

+0

@Donal Rafferty: Bạn đang khởi chạy tính năng này từ đâu? – CommonsWare

+0

Từ một Dịch vụ trong cùng một Đơn đăng ký. –

3
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
      | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 
      | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
+0

nó đang làm việc cho tôi –