在我的应用程序中,我总是需要在应用程序第一次打开时执行一些操作。当用户打开它时,应用会显示一个带有进度条的对话框,同时在后台执行AsyncTask
,然后(在onPostExecute()
上)我需要提交Fragment
。
因此,在我的主Activity
的{{1}}方法中,我有:
onCreate()
所以,一切顺利,但如果用户旋转设备或调用public class InitialActivity extends SherlockFragmentActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_initial);
if(savedInstanceState == null) //Executes just at the firstTime
{
//ApplicationStarter -> It manages all execution to start my app, executes asynctask, shows dialogs..
ApplicationStarter starter = new ApplicationStarter(this) {
@Override
public void afterFinish() {
//It Executes at onPostExecute when doInBackground() finishes
ItensFragment itensfrag = new ItensFragment();
frag.setTargetFragment(itensfrag , 0);
android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager()
.beginTransaction();
ft.replace(R.id.simple_fragment, itensfrag);
ft.commitAllowingStateLoss();
}
};
starter.start();
}
}
}
方法后应用程序崩溃。启动以下异常:
onDestroy()
在java.lang.IllegalStateException: Activity has been destroyed
我搜索了一下,我发现on this post在我试图做的异步回调方法中执行ft.commitAllowingStateLoss();
转换不是一个好习惯。
And i saw this answer,也许我可以适应我的情况。但在此之前,我想知道是否有人对我正在尝试做的事情有更好的方法或建议
提前谢谢。
答案 0 :(得分:0)
@Raghunandan如何建议,我跟着this post,一切正常。最大的区别是,现在我在我的Fragment onCreate
上调用我的ApplicationStarter,它被设置为setRetainInstance(true)
。 InitialActivity的实例为ItensFragment
。我InitialActivity
的{{1}}中的代码是:
onCreate()