Java Android-从ListViewAdapter中删除一个项目,然后刷新
我试图从我的ListViewAdapter中删除一个项目,我已经实现了我的Java Android-从ListViewAdapter中删除一个项目,然后刷新,java,android,listview,Java,Android,Listview,我试图从我的ListViewAdapter中删除一个项目,我已经实现了我的setOnItemLongClickListener执行以下操作: getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongCli
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()指定的适配器处理程序。