BaseAdapter導(dǎo)致notifyDataSetChanged()無效的三個原因及解決方法:
數(shù)據(jù)源沒有改變:notifyDataSetChanged()只有在數(shù)據(jù)源改變時才會刷新列表,如果數(shù)據(jù)源沒有改變,調(diào)用該方法是無效的。解決方法是確保在調(diào)用notifyDataSetChanged()之前,數(shù)據(jù)源已經(jīng)改變。
重寫getView()方法時沒有調(diào)用super.getView():如果在重寫getView()方法時沒有調(diào)用父類的getView()方法,那么即使調(diào)用了notifyDataSetChanged()也不會刷新列表。解決方法是在重寫getView()方法的開頭調(diào)用super.getView()。
對列表的增刪操作沒有通過Adapter的方法進行:如果在增加或刪除列表項時沒有使用Adapter提供的方法,而是直接修改了數(shù)據(jù)源,那么調(diào)用notifyDataSetChanged()也無效。解決方法是通過Adapter的方法來修改列表項,然后再調(diào)用notifyDataSetChanged()。
總結(jié)起來,解決BaseAdapter導(dǎo)致notifyDataSetChanged()無效的方法是:確保數(shù)據(jù)源已經(jīng)改變、調(diào)用父類的getView()方法、使用Adapter的方法進行增刪操作。