Android 片段的初始回调是在活动onStart()之前还是之后调用的?
显示在activity onStart之前调用片段onatAch、onCreate、on CreateView和onActivityCreated。但是,我尝试记录以下内容:Android 片段的初始回调是在活动onStart()之前还是之后调用的?,android,android-lifecycle,Android,Android Lifecycle,显示在activity onStart之前调用片段onatAch、onCreate、on CreateView和onActivityCreated。但是,我尝试记录以下内容: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { Log.e("TRACE", "MainActiv
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);
}
它印了这个:
创建时的主要活动
启动时的主要活动
第一段转速表
创建第一个片段
创建视图的第一个片段
已创建活动的第一个片段
恢复中的主要活动
这取决于如何将片段添加到活动中
向活动添加片段有两种常见方法:通过XML中的标记或通过Java中执行的FragmentTransaction
如果不提供R.id.content视图并使用FragmentTransaction,而是使用如下活动布局创建第一个片段:
<?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>
至于为什么在使用FragmentTransaction时,您会按照看到消息的顺序看到消息,这可以归结为事务是异步的;无法保证在您调用commit时它会立即执行。在您的情况下,系统直到您的活动启动后才真正开始执行它。该链接与我的链接相同。它声明activitycreated上的片段在activityonstart之前被调用,但我的日志语句显示它被称为afterhank you,它会打印出来。shows onActivityCreated在Activity onStart之前被调用,这是一个错误还是我误解了图表?
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