2016-08-17 114 views
0

我有一個包含使用BaseAdapter創建了三個ListView的三個片段。像下面的圖片:適配器,片段和SQLite數據基座之間通信以刷新片段

enter image description here

反正我的ListView是從SqliteDatabase獲取數據。我需要知道的是:當我從ListView中刪除一個項目時我的(收藏夾,拒絕)片段ListViews不會被通知,也不會刷新。

我迄今爲止嘗試是:

呼叫listView.invalidateViews()notifyDataSetChanged()後,我的片段onResume()方法。

我嘗試了這些解決方案二Android ListView not refreshing after notifyDataSetChanged

我的代碼是: 在我的BaseAdapter我'使用這些方法來刷新我的適配器:

public void UpdateView(List<Voiture> items) 
    { 
    this.voitureList = items; 
    notifyDataSetChanged(); 
    } 

在我的片段,我'使用這些方法使用

@Override 
public void onResume() { 
    super.onResume(); 
    adapterLogin.UpdateView(databaseHelper.getAllVoiture(username,currentLength)); 
    listView.setAdapter(new  AdapterLogin(getActivity(),voitureList,username,currentLength,1)); 

} 

在OncreateView()方法我':通知適配器

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    inflate = inflater ; 
    x = inflater.inflate(R.layout.fragemnt_favoris,null); 
    empty = (TextView) x.findViewById(R.id.texteempty); 
    listView = (ListView) x.findViewById(R.id.list); 

    activity = (Main2Activity) getActivity() ; 
    username = activity.getUsername(); 
    databaseHelper = new DatabaseHelper(getActivity()); 
    databaseHelper.InsertActivity(2,username); 
    voitureList = databaseHelper.getAllVoitureFavourite(1,username); 
    adapterLogin = new AdapterLogin(getActivity(),voitureList,username,currentLength,2); 
    if (voitureList.size()>0) 
    { 
     listView.setAdapter(adapterLogin); 
     ((BaseAdapter)listView.getAdapter()).notifyDataSetChanged(); 


    } 
    else 
    { 
     empty.setVisibility(View.VISIBLE); 

    } 



    // Inflate the layout for this fragment 
    return x; 


} 

任何幫助將不勝感激。

+0

你爲什麼不只是使用與事件通知您的應用程序的不同部分事件總線庫?這些庫是:奧托,EventBus,RxBus,Android的... :) – Seishin

+1

嗨Ahlem,你嘗試過使用notifyDataSetInvaldated()呢?來源:https://developer.android.com/reference/android/widget/BaseAdapter.html#notifyDataSetInvalidated() – Paul

+0

@保羅:是的,我使用notifyDataSetInvalda泰德(),但它並沒有對我的工作! –

回答

0

感謝保羅回答的想法是,增添notifyDataSetInvalidated在我的UpdateView()方法在我的適配器,它工作得很好,我的片段現在可以正確地刷新:

void notifyDataSetInvalidated() 

的方法通知所附的觀察員基礎數據不再有效或可用。一旦調用此適配器不再有效,不應報告更多的數據集更改。

參考鏈接: notifyDataSetInvalidated