解決Fragment中ExpandableListView重新整理失敗的絕招,expandablelistview
不知道有沒有朋友遇到過這種問題,在一個fragment1添加的資料(確定已經添加到sqlite裡面了),但是添加的資料要在另一個fragment2的expandableListView裡面顯示出來。這就設計到重新整理的問題。
借鑒了前人的做法,其中感覺比較有好的做法是用非同步處理的方式,在適配器外面聲明一個Handler,然後在ExpandableListView構造方法裡面接收訊息,調用notifyDataSetChanged方法,按他人的說法這個只有group重新整理了,child的資料沒給刷出來。看api文檔發現Group 的伸縮會
引起getChildView(int, int, boolean, View, ViewGroup) 的運行,也就是說只要
伸縮一次就可以了!代碼如下:
expandableList.collapseGroup(groupPosition);
expandableList.expandGroup(groupPosition);
連Adapter 都不用重寫! 在fragment2裡面寫一個refresh方法利用handler發送訊息以運行接收訊息裡面的notifyDataSetChanged方法通知適配器資料發生了改變。在fragment1通過getFragmentManager調用fragment2的refresh方法完成重新整理操作。
試了下,還是不行。
將在手機調試的工程退出,再點擊進去的時候列表的資訊又全部正常顯示出來了。曾經想過去人為地去控制Activity的生命週期,以達到想要的效果,不過感覺不是常規做法沒去用。最後在fragment裡用getActivity().recreate();頁面閃一下,資料就弄出來了。原來其實很簡單,Activity重新啟動,所有的資料重新載入,新添加的資料當然會顯示到ExpandableListView裡面