2013-07-04 40 views
4

在我的OncreateView()設置適配器,當我第一次加載頁面時工作。當我去另一個頁面並進行更改時,回到這個片段它不起作用adapter.notifyDatasetchanged()適配器不工作

@Override 
public void onStart() { 
    super.onStart(); 
    groupItem.clear(); 
    childItem.clear(); 
    List<String> child_Category;child_Category=new ArrayList<String>(); 
    groupItem = obj_Listdatabase.fetchcategory(); 
    childItem.clear(); 
    ListIterator<String> iterator = groupItem 
      .listIterator(); 
    while (iterator.hasNext()) { 
     String categoryname = iterator.next(); 
     child_Category = new ArrayList<String>(); 
     child_Category = obj_Listdatabase 
       .fetchchildlist(categoryname); 
     childItem.add(child_Category); 
    } 

    adapter.notifyDataSetChanged(); 
} 
+0

做的是adapter.notifyDataSetChanged();不工作,還是沒有被召喚?你可以在那裏放一個斷點/日誌,看看它是否被調用? – dors

+0

當我加入這個適配器= new CategoryExpandableAdapter(getActivity(),groupItem, childItem); expandlistview.setAdapter(adapter);而不是adapter.notifyDataSetChanged();這是正常工作... – Satheesh

+0

不調用BaseExpandableListAdapter。 – Satheesh

回答

0

海我輸出這之一:

groupItem.addAll(obj_Listdatabase.fetchcategory()); 

取而代之的是

//groupItem = obj_Listdatabase.fetchcategory(); 

因爲我更改了該適配器的賦值語句(=)中的引用。所以我使用addAll()方法來存儲值而不是引用。

0

你應該更加乾淨地縮進你的代碼,不要使用多個「;」例如,在同一行上。 你絕對可以使用BaseExpandableListAdapter的ISSU是別的地方..

你也應該注意到的onCreate觀點更適合「創建視圖」,讓所有的適配器的東西應該是別的地方像onViewCreated,或onActivityCreated因爲你需要(這只是一些建議)


我假設你的適配器是一個片段,因爲你使用GetActivity()和適配器的構造函數傳遞給活動(上下文)的引用,組列表和孩子名單..好吧

我們假設你正在使用片段onStart。從官方文檔:

Called when the Fragment is visible to the user. This is generally tied to Activity.onStart of the containing Activity's lifecycle. 

因此,通常這種方法是在onViewCreate,onViewCreated ..等至少在你第一次運行代碼時調用。因此,這是確定的

你嘗試使用adapter.notifyDataSetInvalidate(),然後做adapter.notidyDataSetChanged


最後一件事,因爲你實際上由構造數據傳遞到您的適配器,當您更新列表如何適配器知道的變化呢?您的名單是全球性的(靜態的)?

如果不是,做adapter.notifyDataSetChanged()之前,您應該通過列表(組和兒童)與一些二傳手適配器..

好運