You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除草稿自动返回后,如何实现ListView的刷新?

解决删除草稿返回后ListView不刷新的问题

问题核心是删除操作完成后,列表页面的数据源未同步更新,导致已删除的草稿仍显示。以下是几种可行的解决方案:

方案1:通过接口回调通知列表页面刷新

这是低耦合的最优方案,仅在删除成功时触发一次刷新:

  1. 定义回调接口
public interface OnDraftDeletedListener {
    void onDraftDeleted();
}
  1. 在列表页面(如ItrListFragment)实现该接口
public class ItrListFragment extends Fragment implements OnDraftDeletedListener {
    private ListView listView;
    private DraftAdapter adapter;
    private List<Draft> draftList;

    // ... 其他初始化代码

    @Override
    public void onDraftDeleted() {
        // 重新加载最新数据并刷新列表
        loadDraftData();
        adapter.notifyDataSetChanged();
    }

    // 跳转详情页时绑定回调
    private void openDraftDetail(String itrRaisedID) {
        ItrDetailFragment detailFragment = new ItrDetailFragment();
        detailFragment.setDraftDeletedListener(this);
        getParentFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, detailFragment)
                .addToBackStack(null)
                .commit();
    }

    // 加载列表数据的方法
    private void loadDraftData() {
        ApiHelper.get().getItrDrafts(new GetItrDraftsRequest(userID, projectID))
                .enqueue(new ApiRequest.Callback<GetItrDraftsResponse>() {
                    @Override
                    public void onSuccess(GetItrDraftsResponse response) {
                        draftList.clear();
                        draftList.addAll(response.getDrafts());
                    }

                    @Override
                    public void onFailure(String e) {
                        ErrorManager.promptError(getActivity(), e);
                    }
                });
    }
}
  1. 修改详情页的deleteDraft方法,先回调再返回
public class ItrDetailFragment extends Fragment {
    private OnDraftDeletedListener mListener;

    public void setDraftDeletedListener(OnDraftDeletedListener listener) {
        mListener = listener;
    }

    public void deleteDraft() {
        ((LoaderActivity) getActivity()).getLoader().show();
        ApiHelper.get().itrDeleteDraft(new ItrDeleteDraftApi.Request(userID, projectID, itrRaisedID))
                .enqueue(new ApiRequest.Callback<ItrDeleteDraftApi.Response>() {
                    @Override
                    public void onSuccess(ItrDeleteDraftApi.Response response) {
                        ((LoaderActivity) requireActivity()).getLoader().hide();
                        // 通知列表页面刷新
                        if (mListener != null) {
                            mListener.onDraftDeleted();
                        }
                        requireActivity().onBackPressed();
                    }

                    @Override
                    public void onFailure(String e) {
                        ((LoaderActivity) getActivity()).getLoader().hide();
                        ErrorManager.promptError(getActivity(), e);
                    }
                });
    }

    // ... 其他代码
}

方案2:在列表页面onResume()中重新加载数据

如果不想引入回调逻辑,可以在列表页的onResume方法中自动刷新数据,适合数据量较小的场景:

public class ItrListFragment extends Fragment {
    @Override
    public void onResume() {
        super.onResume();
        // 每次回到列表页都重新请求最新数据
        loadDraftData();
    }

    // loadDraftData方法同方案1
}

方案3:直接操作全局数据源(适合数据源全局管理的场景)

如果列表数据源是全局维护的(如单例管理的List),可以直接删除对应项后通知Adapter刷新:

// 在详情页deleteDraft的onSuccess方法中
@Override
public void onSuccess(ItrDeleteDraftApi.Response response) {
    ((LoaderActivity) requireActivity()).getLoader().hide();
    // 从全局数据源移除已删除的草稿
    List<Draft> globalDraftList = DraftManager.getInstance().getDraftList();
    Iterator<Draft> iterator = globalDraftList.iterator();
    while (iterator.hasNext()) {
        Draft draft = iterator.next();
        if (draft.getItrRaisedID().equals(itrRaisedID)) {
            iterator.remove();
            break;
        }
    }
    // 通知列表Adapter刷新
    if (ItrListFragment.getAdapter() != null) {
        ItrListFragment.getAdapter().notifyDataSetChanged();
    }
    requireActivity().onBackPressed();
}

内容的提问来源于stack exchange,提问作者Unknown Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:40:26