Android 为什么在主活动中调用onCreate之前,横向/纵向更改片段会附着?

Android 为什么在主活动中调用onCreate之前,横向/纵向更改片段会附着?,android,android-fragments,android-activity,Android,Android Fragments,Android Activity,我的主要活动是嵌入片段: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); vd = VirtualDatabaseTableProvider.getInstance(getApplicationContext()); fm = getSupportFragmentManager();

我的主要活动是嵌入片段:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        vd = VirtualDatabaseTableProvider.getInstance(getApplicationContext());

        fm = getSupportFragmentManager();
        fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);


        //Create Layout and add fragments
        setContentView(R.layout.main_window);

        ListFragment ListFragment= new ListFragment();
        android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.fragment_pane, ListFragment, "List");
        //ft.replace(R.id.fragment_pane, ListFragment);
        ft.addToBackStack(null);
        ft.commit();




//Initialising buttons
        imgBtnFontInc = (ImageButton) findViewById(R.id.ImgBtnUpFont);
        imgBtnFontInc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(textViewAttached){
                    try{
                            //Some text Resize
                        }
                    }catch (NullPointerException npe){
                        Log.e(TAG, "Error on calling Text resize");
                        Log.e(TAG, npe.getMessage());
                        Log.e(TAG, npe.getStackTrace().toString());
                    }
                }
            }
        }
        );
/* More Buttons code..... */
        imgBtnFontDec.setVisibility(View.GONE);
        imgBtnFontInc.setVisibility(View.GONE);

/* Some Saved State handling to recover detailed text Screen*/
        if(savedInstanceState != null){
            if (savedInstanceState.containsKey("UUID")){
                try{
                    String uuid = savedInstanceState.getString("UUID");
                    if (uuid != null){
                        iniTextScreen(uuid);
                    }
                }catch (Exception e){
                    Log.e(TAG, "Unable To return text");
                }
            }
        }
文本用以下函数初始化:

private void initTextScreen(String StringID){
    Bundle Data = new Bundle();
    Data.putString("UUID", StringID);
    TextScreenFragment TextFragment = new TextScreenFragment();
    TextFragment.setArg1ments(Data);
    if(fm == null){
        fm = getSupportFragmentManager();
    }
    android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
    ft.setCustomAnimations( R.anim.animation_enter, R.anim.animation_exit);
    ft.replace(R.id.fragment_pane, TextFragment, "TextFragment");
    ft.addToBackStack(null);
    ft.commit();
}
我通过TextScreenFragment的简单回调处理了主活动中的按钮可见性。主活动中的回调:

public void onTextViewAttached() {
    textViewAttached = true;
    MainActivity.this.imgBtnFontDec.setVisibility(View.VISIBLE);
    MainActivity.this.imgBtnFontInc.setVisibility(View.VISIBLE);
}
在TextScreenFragment中调用回调:

 @Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    if (!(activity instanceof Callbacks)) {
        throw new IllegalStateException(
                "Activity must implement fragment's callbacks.");
    } else {
        listener = (Callbacks) activity;
        listener.onTextViewAttached();
    }
}
    public interface Callbacks {
    /**
     * Callback for when an item has been selected.
     */

    public void onTextViewAttached();

}
不过,当我把android手机设置为切换potrait/横向模式时,它是有效的:在主要活动和按钮对象中创建之前,先在片段中连接一个被调用的方式。 在主活动中调用onCreate之前,如何将片段附加到主活动上

在按钮已经初始化之后,我在onCreate方法的最后附加了一个特定的片段,但为什么在我附加片段并获得null异常之前就调用了片段中的onAttach,因为按钮对象在onCreate中并没有初始化?这怎么可能呢

当我发表评论时:

    `// MainActivity.this.imgBtnFontDec.setVisibility(View.VISIBLE);
    //MainActivity.this.imgBtnFontInc.setVisibility(View.VISIBLE);`
在回调函数
public void onTextViewAttached()
中,不再发生崩溃,但我仍然注意到在创建主活动之前调用了onAttach,并且调用了两次: 一次是来自hell knows WARE的未初始化活动(主活动的每个元素都为null或具有默认值),第二次是从主活动onCreate正确附加片段

我得出的结论是,在方向上,开关碎片会被捕获到未初始化的活动中。我是否遗漏了一些东西,在方向更改时,我是否应该在主活动中onCreate之前调用其他函数以从布局中获取按钮

这是某种我没有意识到并且我可以利用的碎片自动附加行为吗

附加了片段的活动的生命周期是什么,因为在创建主活动之前就在片段中调用了onAttach似乎是违反直觉的