Android - 从 ListViewAdapter 中删除一个项目然后刷新

Android - Delete an item from ListViewAdapter and then Refresh

我正在尝试从我的 ListViewAdapter 中删除一个项目,我已经实现了我的 setOnItemLongClickListener 这样做:

getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                            @Override
                            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                                           int arg2, long arg3) {
                                Toast.makeText(getActivity(), "On long click listener", Toast.LENGTH_LONG).show();


                                return true;
                            }
                        });

它向我展示了一个 Toast,验证它检测到 onClickListener,我尝试将其删除:mItems.remove(arg2);,但没有任何反应......我一直在寻找正确的答案,我发现我必须调用 notifyDataSetChanged(),但是因为我不能调用这个方法,所以我尝试了这个方法:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case R.id.ofertasRefresh:
            mItems.notifyAll();
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }

但是没有任何反应,LogCat 上没有错误,没有应用程序崩溃,什么都没有...你们能告诉我我错过了什么吗?

你应该这样做-

// 作为 class 成员

ListViewDemoAdapter myAdapter;

然后在方法中-

myAdapter = new ListViewDemoAdapter(getActivity(), mItems);
setListAdapter(myAdapter);

现在在 onItemClickListener 中,

mItems.remove(arg2);
myAdapter = new ListViewDemoAdapter(getActivity(), mItems);
setListAdapter(myAdapter);

请注意,这不是最佳解决方案,但它应该适合您的情况。

第一步是将您的适配器存储在一个成员变量中,以便您稍后可以再次访问它。

不要调用 setListAdapter(new ListViewDemoAdapter(getActivity(), mItems));,而是将 Fragment 更改为如下所示:

public class MyFragment extends ListFragment {
    private Adapter mListAdapter;

    @Override
    public voidonCreate(Bundle savedInstanceState) {
        mListAdapter = new ListViewDemoAdapter(getActivity(), mItems);
        setListAdapter(mListAdapter);
    }

}

然后当您删除一个项目时,您可以调用 mListAdapter.notifyDataSetChanged() 这样列表就知道它需要重新绘制。

notifyAll() isn't remotely close to notifyDataSetChanged().

您需要像这样在 activity 中声明您的全局适配器:

ListViewDemoAdapter adapter;

放:

adapter = new ListViewDemoAdapter(getActivity(), mItems)); setListAdapter(adapter);

而不是:

setListAdapter(new ListViewDemoAdapter(getActivity(), mItems));

当您删除项目时,您应该致电:

adapter.notifyDataSetChanged();