我使用相同的 Activity 进行保存和编辑。我有一个 ListView 。
在列表 fragment 中我有
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
if(dbHelper != null){
Item item = (Item) this.getListAdapter().getItem(position);
Intent intent = new Intent(getActivity(), SaveEditActivity.class);
intent.putExtra("Update_Item", item);
startActivity(intent);
}
}
现在在 SaveEditActivity 中我有
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(....);
Intent intent = getIntent();
if(intent.hasExtra("Update_Item")){
Item item = (Item) intent.getSerializableExtra("Update_Item");
if(item != null){
this.isEdit = true;
this.editedItem = item;
setItemData(item); // set the data in activity
}
}
}
现在,当用户点击保存按钮时,我会检查 isEdit 标志
if(isEdit == true){
updateItem();//update
}else{
saveItem(); // add
}
}
在 Update 方法中,我使用 editedItem
对象更新数据库中的项目
private void updateItem(){
if(this.editedItem != null){
dbHelper.updateItem(editedItem);
}
}
但是我的 ListView 没有用新数据刷新。
我正在使用扩展 BaseAdapter
的 customAdapter
。
在 ListFragmet 中,我在 onResume() 方法中将数据加载到适配器中
@Override
public void onResume() {
super.onResume();
dbHelper = new DatabaseHandler(getActivity());
List<Item> existingItems = dbHelper.getItemData();
adapter = new CustomAdapter(getActivity().getApplicationContext(), existingItems);
if(adapter != null){
this.setListAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
现在从 Activity 返回时应该调用此方法并通知适配器更改?对不对?
有人可以帮忙吗?
最佳答案
您必须以某种方式通知您的 ListView
数据集已更改/更新,以便它应该自行刷新。在我的一个应用程序中,我使用了 Observer
接口(interface)和 Observable
类来观察数据是否发生变化。这有助于我破案。
您可以使用的想法是在每次更新/保存数据集更改时,因此在这样做之后您应该调用一个名为 notifyDataSetChanged()
的方法
/* don't be confuse with this method's name, Its a custom method. I
used this name. You may use another like myAbcdMethod() :) */
private void notifyDataSetChanged() {
setChanged();
notifyObservers(new Boolean(true));
}
notifyDataSetChanged()
是一个私有(private)方法,您应该在 DbHelper 中实现它。每次 edit.save 之后你都可以调用它。
在您的 Activity 中,您应该使用以下内容来刷新列表:
@Override
public void update(Observable observable, Object data) {
isDataChanged = (Boolean) data;
}
@Override
protected void onRestart() {
super.onRestart();
if (isDataChanged) {
adapter.clear();
adapter.refresh(screenNames.toArrayList());
adapter.notifyDataSetChanged();
isDataChanged = false;
}
}
这适用于单 Activity 应用到多 Activity 应用。
关于android - 数据库更新后刷新 Listfragment 中的 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14422352/