方向更改后,IllegalStateException片段未创建视图

时间:2015-08-19 20:36:14

标签: android android-fragments illegalstateexception orientation-changes

我的应用程序有一个主要活动,用户可以从中选择一个项目。该选择会产生一个片段(TracksActivityFragment),它本身就是另一个列表。选择该列表的项目时,会添加一个DialogFragment的片段。到目前为止一切都那么好,但是当我旋转设备时,AFragment onCreate()被调用,然后DailogFragment's onCreate()被调用,然后它随着{{1}而死}说它在IllegalStateException活动第20行(AFragment's)上死亡。

以下是有关该行的活动的一部分:

setContentView

这是片段的onCreate

public class TracksActivity extends AppCompatActivity
{
    private String mArtistName;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tracks); //DIES HERE

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(savedInstanceState != null) { //We've got data saved. Reconstitute it mTrackRowItemList = savedInstanceState.getParcelableArrayList(KEY_ITEMS_LIST); } } 创建了DialogFragment,如下所示:

TracksFragment

这是DialogFragment' onCreate

PlayerFragment fragment = PlayerFragment.newInstance(mTrackRowItemList, i, mArtistBitmapFilename);

// The device is smaller, so show the fragment fullscreen
FragmentTransaction transaction = fragMan.beginTransaction();

// For a little polish, specify a transition animation
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

// To make it fullscreen, use the 'content' root view as the container
// for the fragment, which is always the root view for the activity
transaction.add(android.R.id.content, fragment).addToBackStack(null).commit();

不确定为什么它会回到@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { //We've got data saved. Reconstitute it if (mPlayer != null) { mPlayer.seekTo(savedInstanceState.getInt(KEY_SONG_POSITION)); } } } ,因为它在轮换时有TracksFragment活动,但是既然如此,看起来我需要重新创建整个{{1}对象,但似乎在调用DialogFragment时会保持这种状态。

任何人都知道这里需要做什么?

1 个答案:

答案 0 :(得分:1)

好的,之前有人问过这个问题,但我对解决方案打了折扣......我不应该这样做。

出于某种原因,Android希望Tracks布局XML使用FrameLayout而不是片段。

所以,只需在layout xml文件中用FrameLayout替换fragment,一切都很好。