方向改变后碎片变成鬼魂

时间:2016-05-27 10:55:37

标签: java android android-fragments

我在理解Android如何工作方面遇到了问题。你能帮助我吗? 我已经通过XML将我的片段连接到一个活动。

<fragment android:name="com.unimusic.mediaPlayerControlBar"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:id="@+id/mediaPlayerControlBar"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        />

在fragment类中,我得到了mainActivity类,并给它一个像这样的片段实例:

//Fragment
@Override
    public void onResume (){
        super.onResume();
        mainActivity = (MainActivity)getActivity();
        mainActivity.setFragment(this);
    }
//Activity
public void setFragment(mediaPlayerControlBar f){
        frag = f;
        Log.d("FRAG", "SET");
    }

一切正常。但是当我旋转屏幕时,会出现一个新的“未触摸”片段,但是frag.getView()为null。 getFragments()列表为null。 findFragmentById()也是null。那么,我该如何访问这个新片段?

如果您需要更多代码,请告诉我,我会尽快更新此帖子。

1 个答案:

答案 0 :(得分:1)

您需要保存Fragment实例状态,因为当方向更改时,将重新创建活动和片段。

  1. 在片段中,您需要通过覆盖onActivityCreated()来保存实例状态,并在onSaveInstanceState()

  2. 中恢复它
  3. 在活动中,您必须在onCreate()中保存片段的状态,并在{{1}}中恢复