【问题标题】: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,我有几个问题,您注册监听器的方法是什么,是否适用于设置监听器的任何条件。如果它得到修复,请忽略这个。

标签: java android arrays database string


【解决方案1】:

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

希望这会有所帮助...

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-29
        相关资源
        最近更新 更多