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

Java Android-从ListViewAdapter中删除一个项目,然后刷新,java,android,listview,Java,Android,Listview,我试图从我的ListViewAdapter中删除一个项目,我已经实现了我的setOnItemLongClickListener执行以下操作: getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongCli

我试图从我的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;
                            }
                        });

但是什么也没发生,LogCat上没有错误,没有应用程序崩溃,什么都没有。。。你们能告诉我我错过了什么吗?

你们应该这样做-

//作为班级成员

ListViewDemoAdapter myAdapter;
然后在方法上-

myAdapter = new ListViewDemoAdapter(getActivity(), mItems);
setListAdapter(myAdapter);
现在在听众席上

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

请注意,这不是最好的解决方案,但对于您的情况来说,它应该可以正常工作。

您应该这样做-

//作为班级成员

ListViewDemoAdapter myAdapter;
然后在方法上-

myAdapter = new ListViewDemoAdapter(getActivity(), mItems);
setListAdapter(myAdapter);
现在在听众席上

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

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

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

而不是调用
setListAdapter(新的ListViewDemoAdapter(getActivity(),mItems)),将片段更改为如下所示:

public class MyFragment extends ListFragment {
    private Adapter mListAdapter;

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

}
ListViewDemoAdapter adapter;
然后,当删除项目时,可以调用
mListAdapter.notifyDataSetChanged()
,以便列表知道它需要重新绘制


不是远程接近。

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

而不是调用
setListAdapter(新的ListViewDemoAdapter(getActivity(),mItems)),将片段更改为如下所示:

public class MyFragment extends ListFragment {
    private Adapter mListAdapter;

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

}
ListViewDemoAdapter adapter;
然后,当删除项目时,可以调用
mListAdapter.notifyDataSetChanged()
,以便列表知道它需要重新绘制


不是远程接近。

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

public class MyFragment extends ListFragment {
    private Adapter mListAdapter;

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

}
ListViewDemoAdapter adapter;
付诸表决:

adapter=newlistViewDemoAdapter(getActivity(),mItems));
setListAdapter(适配器);

而不是:

setListAdapter(新的ListViewDemoAdapter(getActivity(),mItems))

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


adapter.notifyDataSetChanged()

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

public class MyFragment extends ListFragment {
    private Adapter mListAdapter;

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

}
ListViewDemoAdapter adapter;
付诸表决:

adapter=newlistViewDemoAdapter(getActivity(),mItems));
setListAdapter(适配器);

而不是:

setListAdapter(新的ListViewDemoAdapter(getActivity(),mItems))

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



adapter.notifyDataSetChanged()

尝试
适配器。notifyDataSetChanged()。您必须在ListView的适配器上通知DataSetChanged。我在ListView的末尾有这个
setListAdapter(新ListViewDemoAdapter(getActivity(),mItems))然后添加此
ListViewDemoAdapter.notifyDataSetChanged()在该行之后尝试
适配器。notifyDataSetChanged()。您必须在ListView的适配器上通知DataSetChanged。我在ListView的末尾有这个
setListAdapter(新ListViewDemoAdapter(getActivity(),mItems))然后添加此
ListViewDemoAdapter.notifyDataSetChanged()该行后面的mAdapter是
ListViewDemoAdapter mAdapter?哎呀,那是个打字错误。这应该是片段顶部定义的
mListAdapter
。在我的回答中修复了它。mAdapter是
ListViewDemoAdapter mAdapter?哎呀,那是个打字错误。这应该是片段顶部定义的
mListAdapter
。在我的回答中修复了它。为什么不是最好的解决方案?当您设置另一个新适配器对象时,可能会出现一些性能问题。由于您有自定义适配器,您可以编写一个公共方法从您的数据源中删除该项,然后执行如下操作-myAdapter.removeFromMySource(arg2);//这是自定义适配器myAdapter.notifyDataSetChanged()中您自己的公共方法。这将是最好的解决方案。我发布的答案将被许多其他人视为最好的解决方案,但我不敢苟同:)。见我最后的评论。:)为什么不是最好的解决方案?在设置另一个新适配器对象时,可能会出现一些性能问题。由于您有自定义适配器,您可以编写一个公共方法从您的数据源中删除该项,然后执行如下操作-myAdapter.removeFromMySource(arg2);//这是自定义适配器myAdapter.notifyDataSetChanged()中您自己的公共方法。这将是最好的解决方案。我发布的答案将被许多其他人视为最好的解决方案,但我不敢苟同:)。见我最后的评论。:)如果在onLongClick事件中调用:mItems.remove(arg2);myAdapter=新的ListViewDemoAdapter(getActivity(),mItems);setListAdapter(myAdapter);正如@Amit K.Saha所说,我认为您可以重新创建每个事件的listview,即使它不是必需的。使用notifyDataSetChanged()适配器处理程序,如果您在onLongClick事件中调用此:mItems.remove(arg2);myAdapter=新的ListViewDemoAdapter(getActivity(),mItems);setListAdapter(myAdapter);正如@Amit K.Saha所说,我认为您可以重新创建每个事件的listview,即使它不是必需的。使用NOTIFYDATASETCHANGE()指定的适配器处理程序。