为啥我不能删除一个项目?

Posted

技术标签:

【中文标题】为啥我不能删除一个项目?【英文标题】:Why can't I remove an item?为什么我不能删除一个项目? 【发布时间】:2016-05-08 15:06:42 【问题描述】:

我真的很沮丧,因为我今天已经尝试了 4 个小时,但我找不到解决方案。出于某种原因,我的长按监听器有时不会被检测到!

 listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() 
        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                       int pos, long id) 

            Toast.makeText(MainActivity.this, "Long click", Toast.LENGTH_SHORT).show();

            contactArrayList.remove(pos);
            arrayAdapter.notifyDataSetChanged();


            return true;
        
    ); 

这个简单的代码只是使用适配器从我的列表和数组列表中删除一个项目。但是,有时,onItemLongClickListener 甚至没有被调用,并且 toast 甚至没有显示!我知道 android 正在检测它,因为每当我在我的日志中长按时都会收到此消息猫:

/ViewRootImpl: ViewRoot's Touch Event : ACTION_UP

那么为什么它有时只起作用?我的代码有问题,还是android本身的问题?如果是android的问题,我该如何解决?

它第一次工作,但退出我的应用程序,旋转屏幕等后,长按停止被检测到。我已经坚持了将近 8 个小时,我真的,真的,真的需要你的帮助。

【问题讨论】:

我不知道这是否相关,但我也收到了这条消息:Internal data leak within a DataBuffer object detected! Be sure to explicitly call release() on all DataBuffer extending objects when you are done with them. (internal object: com.google.android.gms.common.data.DataHolder@RANDOMNUMBERSANDLETTERS) 还有,比如它会工作,然后我旋转屏幕,它就会停止工作...... 贴出的代码没有问题。检查您的堆栈跟踪并检查内存泄漏可能有助于找到原因 @Rich,我有几个问题,您注册监听器的方法是什么,是否适用于设置监听器的任何条件。如果它得到修复,请忽略这个。 OnItemCLickListener not working in listview的可能重复 【参考方案1】:

可以尝试使用 View.OnItemLongClickListener() 代替 AdapterView 并将 OnItemLongClick() 中的参数更改为 View。

希望这会有所帮助...

【讨论】:

【参考方案2】:

检查您是否真的从适配器内的数组中删除了该项目。

【讨论】:

【参考方案3】:

听起来您的侦听器在配置更改期间被破坏,或者并不总是被初始化。确保每次调用设置监听器的代码块。

【讨论】:

以上是关于为啥我不能删除一个项目?的主要内容,如果未能解决你的问题,请参考以下文章

Python为啥不能用列表遍历来删除列表中的相同的元素呢?

为啥我不能从另一个控制器中删除视图?

为啥我不能删除这个表格?

为啥我不能从情节提要的表格单元格中删除标签?

为啥我不能从我的 UICollectionView 中删除图像?

为啥我不能删除或删除 iPhone / iPad Duplicate Enterprise App Icon Copy?