2014-01-11 80 views
0

這是一個簡單的問題,因爲我是Android新手。如何在ListAdapter上使用notifyDataSetChanged()

我有一個ListAdapter的實現,但需要更新列表時,對運行它的對象列表進行更改。在各種文章中建議使用notifyDataSetChanged()。不過當然我得到的錯誤「找不到方法」:

ListView lv = (ListView) findViewById(R.id.menu_list_activity);   
((ListAdapter) lv.getAdapter()).notifyDataSetChanged(); 

在我把它添加到ListView活動的OnCreate():

lv.setAdapter(new MenuListAdapter(this, objects)); 

由於ListAdapter只是一個接口。該方法包含在ArrayAdaptor中。 那我該用什麼,最好的方法是什麼?我基本上只有一個帶有對象的List來填充ListView。

回答

0

在適配器繼承樹中,notifyDataSetChanged()BaseAdapter中定義。假設您的MenuListAdapter直接或間接延伸BaseAdapter,將getAdapter()的結果轉換爲BaseAdapter以調用該方法。

1

你也可以做以下

MenuListAdapter menuListAdapter = new MenuListAdapter(this, objects) 
lv.setAdapter(menuListAdapter); 

現在只需撥打下面的任何地方。

menuListAdapter.notifyDataSetChanged(); 

由於@laalto提到您必須在您的自定義適配器類中擴展適配器。直接使用BaseAdapter或使用像ArrayAdapter一樣的基本適配器的適配器。

0

創建適配器時,將其存儲到本地變量中,然後使用該變量。

MenuListAdapter adapter = new MenuListAdapter(this, objects) 
lv.setAdapter(adapter); 

// You need to update the objects list, so that adapter can get the recent update 
objects.add(newItem); 

// Then notify the adapter 
adapter.notifyDataSetChanged();