1

我将相同的活动用于保存和编辑目的。我有一个列表视图。

在列表片段中我有

@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 方法中,我使用editedItemObject更新数据库中的项目

private void updateItem(){
      if(this.editedItem != null){
          dbHelper.updateItem(editedItem);
      }
    }

但是我的列表视图没有用新数据刷新。

我正在使用customAdapterwhich extends 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();
        }
    }

现在,当从活动返回时,应该调用这个方法并且应该通知适配器更改?对不对?

有人可以帮忙吗?

4

1 回答 1

1

您必须以某种方式通知您ListView数据集已更改/更新,以便它应该自行刷新。在我的一个应用程序中,我使用Observer接口和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()是一个私有方法,你应该在你的 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;
        }
    }

这适用于单个活动应用程序到多个活动应用程序。

于 2013-01-20T07:13:25.317 回答