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);