我使用相同的活动进行保存和编辑。我有一个列表视图。
在List片段中我有
@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
Object
private void updateItem(){
if(this.editedItem != null){
dbHelper.updateItem(editedItem);
}
}
但是我的列表视图没有刷新新数据。
我使用customAdapter
扩展BaseAdapter
。
在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();
}
}
现在从活动返回时,应调用此方法,并应通知适配器更改?不是吗?
有人可以帮忙吗?
答案 0 :(得分:1)
不知何故,您必须通知您的ListView
数据集已更改/更新,以便它自行刷新。在我的一个应用中,我使用了Observer
界面&amp; 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()
是一种私有方法,&amp;你应该在你的DbHelper中实现它。每次edit.save之后你都可以调用它。
在您的活动中,您应该使用以下内容刷新列表:
@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;
}
}
这适用于多个活动应用的单个活动应用。