【发布时间】:2016-08-17 08:20:45
【问题描述】:
我有三个片段,其中包含三个使用 BaseAdapter 创建的 ListView。如下图:
无论如何,我的 listView 正在从 SqliteDatabase 获取数据。我需要知道的是:当我从我的 ListView My(Favorite,Rejected) Fragments ListViews 中删除一个项目时,不会通知并且不会刷新。
到目前为止我尝试过的是:
在我的片段的onResume() 方法中notifyDataSetChanged() 之后调用listView.invalidateViews()。
我尝试了这些解决方案两个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;
}
任何帮助将不胜感激。
【问题讨论】:
-
为什么不使用事件总线库来通知应用程序的不同部分?这些库是:Otto、EventBus、RxBus-Android... :)
-
嗨 Ahlem,您是否尝试过使用 notifyDataSetInvaldated() 代替?来源:developer.android.com/reference/android/widget/…
-
@Paul :是的,我使用了 notifyDataSetInvaldated() 但它对我不起作用!
-
@AhlemJarrar :即使在 BaseAdapterClass 中?在更新方法中?只是想在这里彻底:)
-
@AhlemJarrar 很高兴我能帮上忙
标签: android sqlite listview android-fragments baseadapter