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

时间:2015-03-24 16:19:37

标签: java android listview

我正在尝试从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没有错误,没有应用程序崩溃,没有任何东西......你能告诉我我缺少什么吗?

3 个答案:

答案 0 :(得分:2)

你应该这样做 -

//作为班级成员

ListViewDemoAdapter myAdapter;

然后在方法中 -

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

现在在onItemClickListener中,

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

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

答案 1 :(得分:1)

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

不要调用setListAdapter(new ListViewDemoAdapter(getActivity(), mItems));,而是将片段更改为以下内容:

public class MyFragment extends ListFragment {
    private Adapter mListAdapter;

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

}

然后当您删除某个项目时,可以调用mListAdapter.notifyDataSetChanged(),以便列表知道它需要重绘。

notifyAll()远离notifyDataSetChanged()

答案 2 :(得分:1)

您需要在活动中声明适配器全局,如下所示:

ListViewDemoAdapter adapter;

把:

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

而不是:

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

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

adapter.notifyDataSetChanged();