2012-01-04 27 views
12

Những mảnh vỡ là những điều thú vị nhưng, vì vậy tôi nghĩ, một khi bạn biết rằng chúng là một công cụ vô giá để viết mã tốt trên nhiều thiết bị.Fragment/Activity Lifecycles và Orientation Change

Tuy nhiên, trong khi sửa chữa lỗi thay đổi hướng tôi đã chạy lên tường. Để phân đoạn của tôi hoạt động, nó cần truy cập vào một Chế độ xem thuộc về Hoạt động dẫn tôi đến một cuộc rượt đuổi vui vẻ cố gắng tìm cách hoạt động của vòng đời Fragment &.

tôi thêm một đoạn để hoạt động của tôi xem trong đó là onCreate() phương pháp:

// Only add a fragment once, as after it's been added it cannot be replaced (Even though there is a .replace() method. Which is a massive gaping hole in fragments as a technology if you ask me) 
if(savedInstanceState == null) { 
    MainMenuFragment menu= new MainMenuFragment(); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.menuFrame, menu); 
    transaction.commit(); 
} 

Dẫn đến hoạt động- này> Fragment Vòng đời:

01-04 15:17:27.226: W/SinglePaneActivity 0: onCreate() 
01-04 15:17:27.378: W/MainMenuFragment 0: onAttach() to SinglePaneActivity 0 
01-04 15:17:27.378: W/MainMenuFragment 0: onCreate() 
01-04 15:17:27.453: W/MainMenuFragment 0: onActivityCreated() 
01-04 15:17:27.476: W/MainMenuFragment 0: onStart() 
01-04 15:17:27.476: W/SinglePaneActivity 0: onStart() 
01-04 15:17:27.476: W/SinglePaneActivity 0: onResume() 
01-04 15:17:27.476: W/MainMenuFragment 0: onResume() 

Một sự thay đổi định hướng tuy nhiên nhấn mạnh rằng isn này 't thường là trường hợp, Một đoạn onCreate() phương pháp không được gọi là sau khi nó là cha mẹ Hoạt động onCreate(). Infact, cuộc gọi vòng đời đầu tiên của một của Fragment onAttach() xảy ra trước khi Hoạt động thậm chí đã được tạo ra (null được thông qua như là một cuộc tranh cãi):

01-04 15:10:49.589: W/MainMenuFragment 0: onPause() 
01-04 15:10:49.589: W/SinglePaneActivity 0: onPause() 
01-04 15:10:49.589: W/MainMenuFragment 0: onStop() 
01-04 15:10:49.589: W/SinglePaneActivity 0: onStop() 
01-04 15:10:49.589: W/MainMenuFragment 0: onDestroyView() 
01-04 15:10:49.589: W/MainMenuFragment 0: onDestroy() 
01-04 15:10:49.589: W/MainMenuFragment 0: onDetach() 
01-04 15:10:49.609: W/SinglePaneActivity 0: onDestroy() 
01-04 15:10:49.617: W/MainMenuFragment 1: onAttach() to null 
01-04 15:10:49.617: W/MainMenuFragment 1: onCreate() 
01-04 15:10:49.617: W/SinglePaneActivity 1: onCreate() 
01-04 15:10:49.890: W/MainMenuFragment 1: onActivityCreated() 
01-04 15:10:49.917: W/MainMenuFragment 1: onStart() 
01-04 15:10:49.917: W/SinglePaneActivity 1: onStart() 
01-04 15:10:49.921: W/SinglePaneActivity 1: onResume() 
01-04 15:10:49.921: W/MainMenuFragment 1: onResume() 

Tôi hoàn toàn không có ý tưởng tại sao điều này xảy ra. Bất cứ ai có thể tiết lộ bất kỳ ánh sáng về lý do tại sao Fragment.onAttach() đang được gọi trước khi nó có chứa Hoạt động đã được tạo ra?

Các phân đoạn tôi có mà không cần quyền truy cập vào hoạt động có chứa của chúng (cho đến khi giao diện người dùng tương tác) hoạt động như mong đợi.

Trả lời

11

Argh,

01-04 15:46:23.175: W/MainMenuFragment 0: onAttach() to SinglePaneActivity 0 
01-04 15:46:23.179: W/MainMenuFragment 0: onCreate() 
01-04 15:46:23.246: W/MainMenuFragment 0: onActivityCreated() with Activity SinglePaneActivity 0 
01-04 15:46:23.269: W/MainMenuFragment 0: onStart() 
01-04 15:46:23.269: W/SinglePaneActivity 0: onStart() 

Tại sao các heck có một phương pháp onAttach() Tôi không có ý tưởng. Đặc biệt vì "đính kèm" xảy ra trước khi có một Hoạt động.

Phương pháp tôi cần là dĩ nhiên, onActivityCreated() xảy ra khi cuộc gọi cuối cùng trong bộ "Tạo" Fragment lifecycle events.

+0

hãy giúp tôi http://stackoverflow.com/questions/12331787/save-fragment-objects – user4o01

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