我以前见过这个问题的几个版本,但这次例外的原因似乎与我自己的不同。
我想做什么:
-主活动类在底部有一个工具栏,点击按钮将显示一系列片段,一个接一个。
-一个类edittitemfragmentmanager,它被安装在按钮点击上,并且有方法显示特定的片段基于被点击的工具栏按钮。
我想使用我创建的这个管理器类,因为它可以显著地清理我的代码,并且可以在以后添加更多的功能。
这是我的edittitemfragmentmanager类,我不确定是否扩展活动是一个好主意,我认为它会把我的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的activity生命周期。我认为我的问题是由于这个类扩展活动,这使我的主暂停,和FragmentTransaction没有什么要提交?如果是这样,我需要得到我的主活动的现有实例,并调用它吗?这就是我有点迷失的地方,如果有人了解活动/片段的生命周期,解释我如何在仍然有这样的助手类的情况下实现这一点?
如果您正在使用SupportFragmentManager,那么您需要从FragmentActivity扩展,而不仅仅是Activity。还要确保从v4支持库中导入Fragment,而不是从android.app中。
除此之外,你似乎用"new"实例化了Activity的子类,这很糟糕。仅使用intent创建活动
我通过将我的管理器类移动到main的私有内部类来解决这个问题,因为它们是如此紧密耦合。现在没有片段问题