2017-09-16 20 views
0

https://github.com/xxv/android-lifecycle顯示onAttach,onCreate,CreateView和onActivityCreated上的片段在活動onStart之前被調用。不過,我想記錄此:Activity onStart()之前或之後是否調用片段的初始回調?

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     Log.e("TRACE", "MainActivity onCreate"); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Fragment firstFragment = FirstFragment.newInstance(); 
     getSupportFragmentManager().beginTransaction().replace(R.id.content, firstFragment).commit(); 
    } 

    @Override 
    public void onStart() { 
     Log.e("TRACE", "MainActivity onStart"); 
     super.onStart(); 
    } 

FirstFragment看起來是這樣的:

public class FirstFragment extends Fragment { 

    public FirstFragment() { 
     // Required empty public constructor 
    } 

    public static FirstFragment newInstance() { 
     FirstFragment fragment = new FirstFragment(); 
     return fragment; 
    } 

    @Override 
    public void onAttach(Context context) { 
     Log.d("TRACE", "FirstFragment onAttach"); 
     super.onAttach(context); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     Log.d("TRACE", "FirstFragment onCreate"); 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     Log.d("TRACE", "FirstFragment onCreateView"); 
     return inflater.inflate(R.layout.fragment_first, container, false); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     Log.d("TRACE", "FirstFragment onActivityCreated"); 
     super.onActivityCreated(savedInstanceState); 
    } 

它打印此:

  1. MainActivity的onCreate
  2. MainActivity在onStart
  3. FirstFragment onAttach
  4. FirstFragment的onCreate
  5. FirstFragment onCreateView
  6. FirstFragment onActivityCreated
  7. MainActivity的onResume
+0

https://developer.android.com/guide/components/fragments.html#Lifecycle –

+0

該鏈接與我的相同。它聲明片段onActivityCreated在Activity onStart之前被調用,但我的日誌語句顯示它在 – user3148156

回答

1

這取決於Fragment是如何加入到Activity

有兩種常見方法可以將片段添加到活動中:通過XML中的<fragment>標記或通過Java中執行的FragmentTransaction

如果代替提供R.id.content視圖,並使用FragmentTransaction,您創建FirstFragment通過使用活動佈局像這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <fragment 
     android:id="@+id/content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     class="com.example.stackoverflow.FirstFragment"/> 

</LinearLayout> 

您將在日誌中看到這一點:

E/TRACE (6094): MainActivity onCreate 
D/TRACE (6094): FirstFragment onAttach 
D/TRACE (6094): FirstFragment onCreate 
D/TRACE (6094): FirstFragment onCreateView 
E/TRACE (6094): MainActivity onStart 
D/TRACE (6094): FirstFragment onActivityCreated 
E/TRACE (6094): MainActivity onResume 

至於爲什麼你看到的順序消息你看到他們使用FragmentTransaction時,ç事實上,交易是異步;我們不保證只要您致電commit()就會執行此操作。在你的情況下,系統實際上並沒有執行它,直到你的活動onStart()

+0

謝謝之後調用,它確實打印了它。 https://github.com/xxv/android-lifecycle顯示onActivityCreated在Activity onStart之前調用,是一個錯誤還是我誤解了圖表? – user3148156

相關問題