非法状态异常活动已被破坏fragmenttransaction.commit()

时间:2014-06-22 19:19:51

标签: android android-activity android-fragments

之前我已经看过这个问题的几个版本,但是这个例外的原因与我看来不同。

我想做什么:

-Main Activity类底部有一个工具栏,点击按钮会一个接一个地显示一系列片段。

- 一个类EditItemFragmentManager,它在按钮单击时实例化,并具有基于单击的工具栏按钮显示特定片段的方法。

我想使用我创建的这个管理器类,因为它可以显着清理我的代码,并且可以在以后添加更多功能。

这是我的EditItemFragmentManager类,我不确定是否扩展Activity是一个好主意,我认为它会暂停我的MainActivity

public class EditItemFragmentManager extends Activity{
//instance variables

public EditItemFragmentManager(){
// initialization of some variables
}


public void editItem(){
editItemSequence();
}

private void editItemSequence(){
EditNameFragment enf = new EditNameFragment();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.add(editNameFragment, EDIT_FRAG_TAG);
        fragmentTransaction.addToBackStack(EDIT_FRAG_TAG);
        fragmentTransaction.commit();
}

}

所以当commit()时它会爆炸;叫,给我

java.lang.IllegalStateException: Activity has been destroyed

这就是我试图从我的MainActivity中获取此片段的方法,

 @Override
            public void onClick(View view) {
                EditIteFragmetManager manager = new EditIteFragmetManager();
                manager.editItem();
            }

我仍然在学习Android中的Acvtivity生命周期。我认为我的问题是由于这个类扩展了Activity,它将我的Main置于暂停状态,而FragmentTransaction没有什么可承诺的?如果是这样,我需要获取我的主要活动的现有实例并在其上调用它?如果有人了解活动/碎片的生命周期,解释如何在实现这一目标的同时仍然有一个像这样的辅助类,这就是我有点迷失的地方?

2 个答案:

答案 0 :(得分:0)

如果您正在使用SupportFragmentManager,则需要从FragmentActivity扩展,而不仅仅是Activity。还要确保从v4支持库导入了Fragment,而不是android.app。

除此之外,你似乎用“new”实例化Activity的子类,这很糟糕。仅使用Intents创建活动。

答案 1 :(得分:0)

我通过将我的经理类移动到我的主要的私有内部类来解决这个问题,因为它们紧密耦合。现在没有碎片问题。