2011-06-17 72 views
0

我寫一個Android應用程序(目標在的Android版本2.1以上)。我正在使用ExpandableListViewSimpleCursorTreeAdapter。我發現它會按照以下順序崩潰:的Android ExpandableListView SimpleCursorTreeAdapter啓動空會崩潰

  1. ExpandableListView啓動爲空(即數據庫中沒有對應的記錄)。
  2. 添加記錄。
  3. 返回屏幕ExpandableListView。現在,顯示組。
  4. 點擊羣組展開,活動將被迫關閉。

經過互聯網搜索的天,我的應用程序的來源,然後痛苦的跟蹤,然後Android的平臺源,
似乎問題是:在Android平臺上啓動i將SimpleCursorTreeAdapter
將存儲的列表子女在私人成員mChildFrom實例化和(奇怪)ON條件如果至少有一個組。如果沒有記錄(因此沒有組),則不存儲子字段列表。當記錄隨後添加以及將組展開爲顯示的子行時,ExpandableListView將因爲私人成員mChildFrom爲空而崩潰。

因此,我現在的解決方法是:如果數據庫中存在相關記錄,那麼只能實例化SimpleCursorTreeAdapter。如果沒有,請在OnResume()期間重試實例化。

這將幫助我(或有同樣的問題其他貧困人)如果任何人有墜機更好的理由,或者有更好的解決方案。 (我傾向於認爲,這是在Android平臺上的錯誤。)

+0

你能顯示你的活動代碼嗎? – Flo 2011-06-17 10:00:18

+0

@Flo,我真的不想發表冗長的代碼(會有相關ExpandableListView,SimpleCursorTreeAdapter,數據庫訪問等代碼)如果證明這個問題是獨一無二的,我和別人無法重現問題,我將再次在我的代碼上鑽取。我的工作似乎很好,但我真的想要一個更優雅/直接的解決方案。 – Yam 2011-06-17 10:32:28

+0

我做類似的位置http://stackoverflow.com/questions/10611927/simplecursortreeadapter-and-cursorloader東西 – toobsco42 2012-05-16 05:14:18

回答

0

嘗試以下。在onCreate()中實例化適配器,但將null作爲遊標參數傳遞。在onResume()中,然後創建新的光標並使用changeCursor()將它傳遞給適配器。通過這種方式,無論何時在數據模型中更改任何內容(添加,刪除,編輯行),都會得到新的遊標。

+0

如果我的理解是正確的,問題是與遊標無關,而是適配器的實例化。一旦適配器在沒有相關記錄時被實例化,成員mChildFrom可能不會被設置,並且活動將崩潰。 – Yam 2011-06-17 10:41:07

+0

好的,我檢查了SimpleCursorTreeAdapter源代碼,看看你的問題是什麼,你是對的,它與遊標無關。 – Flo 2011-06-17 10:58:31

+0

第二個想法,適配器的實例化期間通過一個空光標似乎推薦的方式中所示的樣品ExpandableList2 [鏈接](http://developer.android.com/resources/samples/ApiDemos/src/com/example/機器人的/ apis /視圖/ ExpandableList2.html)。邏輯流程將會有所不同,也許可以避免這個問題。要嘗試這一點,我需要研究queryHandler。我可能會稍後嘗試,並隨後告知結果。 – Yam 2011-06-17 11:13:04