2016-12-31 98 views
0

我有一個設置與數據列表視圖從數據庫自定義ArrayAdapter:刷新列表視圖數據

CustomAdapter adapter = new CustomAdapter(myview.getContext(), -1, database.getAll()); 
listview.setAdapter(adapter); 

現在,我要當用戶刪除數據庫itemview應刷新。 到目前爲止,我可以成功地從數據庫中刪除該項目,但它仍然在列表視圖中。在一個ArrayAdapter類我稱之爲刷新()方法,從一個新的類相同,以適配器的父類

public void refresh(){ 
    ParentClass class_par = new ParentClass(); 
    class_par.refreshfromParent(); 
    } 

而在父類我有一個新方法:refreshfromParent()

public void refreshfromAlarm(){ 
    DatabaseHandler database = new DatabaseHandler(myview.getContext()); 
    listview.setAdapter(new CustomAdapter(myview.getContext(), -1, database.getAll())); // here I change listview adapter, and populate it with new database data, but I get NullPointerException 
    } 

所以,我怎樣才能刷新列表視圖項目?請,不要提到notifyDataSetChanged(),它不工作。

+0

只需使用adapter.notifyDatasetchanged()來刷新列表視圖 –

+0

@Divyesh真的嗎? – Technologuy

+0

是的,當您刪除或更改listitem數據時,只需使用上面的行。它讓你通過做 –

回答

0

在這裏你做出錯誤的連接

CustomAdapter adapter = new CustomAdapter(myview.getContext(), -1, database.getAll()); 
     listview.setAdapter(adapter); 

    //so first you should make an arrayList and define it globally like 
    // ArrayList <yourType>list = new ArrayList<>(); 

    //then initialize your adapter like this 

    list.addAll(databse.getAll()); 
    CustomAdapter adapter = new CustomAdapter(myview.getContext(), -1, list); 
     listview.setAdapter(adapter); 

    // now when you want to delete an item 
    // delete it from your list like list.remove(location) 
    // and also delete same item from your datebase 
    // after that just call this 
    notifyDataSetChanged(); 
+0

它拋出OutOfBoundsException。我終於決定關閉並重新啓動我的片段,其中包含我的列表視圖,因此它具有相同的結果。 – Technologuy

+0

應該有一些可能問題,當你從arraylist通過特定位置刪除項目,這就是你得到OutOfBoundsException錯誤的方式。reload fragment不是好方法 –

0

我意識到notifyDataSetChanged是個大麻煩,所以我決定關閉並重新啓動我的片段,其中包含我的列表視圖。因此,結果與DataSetChanged相同,並且用戶的眼睛沒有差異。我建議所有在這個問題上達成一致的人都這樣做。