我有DialogFragment
和Loader
。onLoadFinished方法中的開始活動
對話框提示用戶從應用程序註銷。
當用戶選擇註銷時,我激活了Loader
,它清除了首選項和數據庫,然後我完成了當前的Activity
。
Loader
完成之後,我想開始新的Activity
登錄屏幕,但我遇到兩個問題:
getActivity()
方法返回null
- 我無法運行新
Activity
因爲我'out ofActivity
context
您有任何解決方案嗎?
我有DialogFragment
和Loader
。onLoadFinished方法中的開始活動
對話框提示用戶從應用程序註銷。
當用戶選擇註銷時,我激活了Loader
,它清除了首選項和數據庫,然後我完成了當前的Activity
。
Loader
完成之後,我想開始新的Activity
登錄屏幕,但我遇到兩個問題:
getActivity()
方法返回null
Activity
因爲我'out of Activity
context
您有任何解決方案嗎?
這聽起來不像你的情況,完全可以保證使用Loader
或LoaderManager
。
使用的AsyncTask
清除偏好和數據庫(可能呈現出某些種類的一個ProgressDialog
如果此操作是耗時的)。
當任務完成時,調用onPostExecute
。從片段中寫回調方法,首先調用startActivity(...)
,然後致電finish()
。
聽起來合法。我只有一個疑問 - 如果「活動」會被重新創建(例如配置更改)會怎麼樣?我最終會調用舊的'Activity'實例的回調,而新的實例不會受到影響。 – pixel 2012-07-16 18:13:59
只要在'onActivityCreated'被調用後顯示對話框,就知道底層的Activity必須存在。 – 2012-07-16 19:31:12
@pixel btw,你得到一個錯誤的原因可能是因爲你試圖在'onLoadFinished'中執行一個片段事務。該文檔明確指出,不應該在'onLoadFinished'中執行此操作,因爲'Activity'的狀態可能不會被保存。儘管如此,我仍然建議你在這裏使用'AsyncTask'。 – 2012-07-17 01:38:36
可以再次調用的意圖:
final Context context = this;
//load next activity by intent
Intent intent = new Intent(context, YourActivity.class);
//use the YourActivity activity project
startActivity(intent);
因此,在'onLoadFinished'你叫'startActivity'爲貴 「登錄」'Activity'和'finish'當前'FragmentActivity'控股你的'碎片'。是對的嗎? – adneal 2012-07-16 17:36:15
我覺得你的問題是通過調用完成。我相信這樣做會破壞你的活動參考。這使得getActivity()返回null。也許你可以轉向更多的事件驅動風格,並且在用戶選擇註銷後生成廣播意圖。然後在登錄屏幕活動中有一個接收器來喚醒自己。 – 2012-07-16 17:36:22
@RyanGray即使我不調用完成對'Activity'的引用是'null'。 – pixel 2012-07-16 18:14:52