2012-12-03 33 views
13

khi tôi bắt đầu ý định Camera, tôi nhận thấy onActivityResult được gọi trước onResume trong vòng đời fragment.Khi nào thì onActivityResult của fragment được gọi trong vòng đời của các mảnh vỡ?

Tôi cũng nhận thấy onActivityResult được gọi sau onStart.

Nhưng đây là phần lạ: tôi có biến fileUri == "một số đường dẫn hình ảnh". Biến này là

  • NOT NULL in onStart.
  • NULL trong onActivityResult
  • NOT NULL một lần nữa trong onResume

thấy logcat

12-03 14:39:42.418: D/Fragment1(29220): onStart fileUri: file:///mnt/sdcard/OPS_IMAGES/IMG_20121203_143933.jpg 
12-03 14:39:42.463: W/PhoneWindow(29220): Previously focused view reported id 2131034140 during save, but can't be found during restore. 
12-03 14:39:42.463: D/Fragment1(29220): onActivityResult fileUri is NULL!!! 
12-03 14:39:42.468: D/Fragment1(29220): onResume fileUri: file:///mnt/sdcard/OPS_IMAGES/IMG_20121203_143933.jpg 

phần tồi tệ nhất là, điều này chỉ xảy ra 50% thời gian. Một 50% onActivityResult khác có thể truy cập giá trị fileUri mà không có vấn đề ...

Làm thế nào để sửa lỗi này?

LƯU Ý: Vì mục đích đơn giản, tôi không bao gồm mã các phương thức onResume, onStart, onActivityResult của mình. Chúng chỉ là các phương thức cơ bản với kiểm tra biến và cuộc gọi log. Nếu cần, tôi sẽ chỉnh sửa câu hỏi và thêm các phương thức này.

NOTE2: tôi đang sử dụng thư viện hỗ trợ của Google để hỗ trợ các đoạn trên các phiên bản API cũ hơn.

+0

Bạn có quản lý để giải quyết vấn đề đó? – aProgrammer

+2

Có thể chúng là các cá thể khác nhau của cùng một lớp 'Fragment1'? Thêm một 'System.identityHashCode (this)' vào nhật ký để in ra một định danh mỗi cá thể – Xiao

Trả lời

1

Đây không phải là khu vực tôi đã gặp sự cố hoặc sự cố mà tôi gặp phải, nhưng nếu biến của bạn không hiển thị vì bất kỳ lý do nào ... Bạn đã thử sử dụng một loại cách khác để tham chiếu giá trị ?

Đề xuất của tôi sẽ là thử sử dụng biến SharedPreferences và lưu giá trị ở đó trong Trình chỉnh sửa và kéo nó ra ngoài. Đây có thể không phải là giải pháp tốt nhất nhưng có thể là một công việc xung quanh cho thời điểm này.

Tôi có thông báo lỗi tương tự từ logcat, đó là cách tôi tình cờ gặp bài đăng của bạn.

"01-27 11:13:42.899: W/PhoneWindow(1591): Previously focused view reported id 16908862 during save, but can't be found during restore." 

Cách tôi có thể khắc phục vấn đề của mình là "Constructor trống" của tôi không được tái tạo đoạn của tôi. Trong đoạn tôi chỉ có 1 biến là 'ID' được chuyển lại cho hoạt động của tôi khi người dùng chọn một mục có lựa chọn của họ. Tôi chỉ đơn giản là tái instaniated mảnh của tôi bằng cách gọi constructor bình thường của tôi với các giá trị thông qua.

ví dụ:

public UIDialogFragmentVolume() { 
    this(ID); 
} 

public UIDialogFragmentVolume(int typeID) { 
    ID = typeID; 
} 

Tôi hy vọng điều này sẽ giúp bạn xác định và khắc phục sự cố của bạn.

2

Để trả lời câu hỏi ban đầu của bạn, đây là thứ tự của vòng đời callbacks

12-09 16:38:41.800 10227-10227/org.Test I/Fragment: ## OnStart() 
12-09 16:38:41.820 10227-10227/org.Test I/Fragment: ## OnActivityResult() 
12-09 16:38:41.821 10227-10227/org.Test I/Fragment: ## OnResume() 
Các vấn đề liên quan