3

我有DialogFragmentLoaderonLoadFinished方法中的开始活动

对话框提示用户从应用程序注销。

当用户选择注销时,我激活了Loader,它清除了首选项和数据库,然后我完成了当前的Activity

Loader完成之后,我想开始新的Activity登录屏幕,但我遇到两个问题:

  1. getActivity()方法返回null
  2. 我无法运行新Activity因为我'out of Activitycontext

您有任何解决方案吗?

+0

因此,在'onLoadFinished'你叫'startActivity'为贵 “登录”'Activity'和'finish'当前'FragmentActivity'控股你的'碎片'。是对的吗? – adneal 2012-07-16 17:36:15

+0

我觉得你的问题是通过调用完成。我相信这样做会破坏你的活动参考。这使得getActivity()返回null。也许你可以转向更多的事件驱动风格,并且在用户选择注销后生成广播意图。然后在登录屏幕活动中有一个接收器来唤醒自己。 – 2012-07-16 17:36:22

+0

@RyanGray即使我不调用完成对'Activity'的引用是'null'。 – pixel 2012-07-16 18:14:52

回答

1

这听起来不像你的情况,完全可以保证使用LoaderLoaderManager

  1. 使用的AsyncTask清除偏好和数据库(可能呈现出某些种类的一个ProgressDialog如果此操作是耗时的)。

  2. 当任务完成时,调用onPostExecute。从片段中写回调方法,首先调用startActivity(...),然后致电finish()

+0

听起来合法。我只有一个疑问 - 如果“活动”会被重新创建(例如配置更改)会怎么样?我最终会调用旧的'Activity'实例的回调,而新的实例不会受到影响。 – pixel 2012-07-16 18:13:59

+0

只要在'onActivityCreated'被调用后显示对话框,就知道底层的Activity必须存在。 – 2012-07-16 19:31:12

+0

@pixel btw,你得到一个错误的原因可能是因为你试图在'onLoadFinished'中执行一个片段事务。该文档明确指出,不应该在'onLoadFinished'中执行此操作,因为'Activity'的状态可能不会被保存。尽管如此,我仍然建议你在这里使用'AsyncTask'。 – 2012-07-17 01:38:36

0

可以再次调用的意图:

final Context context = this; 

//load next activity by intent 
Intent intent = new Intent(context, YourActivity.class); 
//use the YourActivity activity project 
startActivity(intent);