我正在尝试从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没有错误,没有应用程序崩溃,没有任何东西......你能告诉我我缺少什么吗?
答案 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()
,以便列表知道它需要重绘。
答案 2 :(得分:1)
您需要在活动中声明适配器全局,如下所示:
ListViewDemoAdapter adapter;
把:
adapter = new ListViewDemoAdapter(getActivity(), mItems));
setListAdapter(adapter);
而不是:
setListAdapter(new ListViewDemoAdapter(getActivity(), mItems));
当您删除的项目时,您应该致电:
adapter.notifyDataSetChanged();