【问题标题】:onItemLongClick won't update a view item in listviewonItemLongClick 不会更新列表视图中的视图项
【发布时间】:2026-01-17 19:50:01
【问题描述】:

美好的一天!

我想知道为什么 onItemLongClick 不会更新 listview 中的视图项,但是当我使用 onItemClick 它按预期工作时,这是我的代码的 sn-p。抱歉,我忘记在该 sn-p 中添加 return 语句,但问题仍未解决。

private void updateView(int position) {
    View v = listView.getChildAt(position -
            listView.getFirstVisiblePosition());

    ImageView tempImgView = (ImageView) v.findViewById(R.id.avatarIcon);
    if (listView.isItemChecked(position)) {
        tempImgView .setImageResource(R.drawable.ic_check_24dp);
    } else {
        tempImgView .setImageResource(R.drawable.ic_uncheck_24dp);
    }
}


@Override
public void onItemClick(AdapterView<?> arg0, View view, int position,
        long id) {
        updateView(position);
        return true;
}

@Override
public boolean onItemLongClick(AdapterView<?> arg0, View view, int position,
        long id) {
    updateView(position);
    return true;
}

【问题讨论】:

  • 发布 updateView()。
  • 你的代码甚至无法编译。
  • 您好,对不起,我忘了添加退货声明,但问题仍未解决。

标签: java android android-layout listview onlongclicklistener


【解决方案1】:

你必须返回true,所以android会知道你的点击已经被消费了。

@Override
public boolean onItemLongClick(AdapterView<?> arg0, View view, int position,
        long id) {
    updateView(position);
   return true;
}

【讨论】:

  • 正确,我只想补充一点,如果返回 true,Android 将不会被 onItemClick 事件所困扰,以防他也在代码中的某个地方实现它。
  • 您好,我很抱歉忘记在该问题上添加退货声明,但问题仍未解决。
【解决方案2】:

您必须返回 onItemLongClick 监听器的真值,试试这个:-

    @Override
     public boolean onItemLongClick(AdapterView<?> arg0, View view, int   position,
        long id) {
     updateView(position);
    return true;
     }

希望这会对您有所帮助。 :)

【讨论】:

  • 您好,感谢您的反馈,但很抱歉我忘记添加退货声明,但问题仍未解决。
【解决方案3】:

实例化您的项目视图后,设置:

yourItemView.setLongClickable(true);
yourItemView.setOnLongClickListener(this);

并且记得添加长按事件返回:

@Override
public boolean onItemLongClick(AdapterView<?> arg0, View view, int position,
        long id) {
    updateView(position);
    return true;
}

【讨论】:

  • OnItemLongClick 是一个listView 内itens 的回调,onLongClickListener 会为每个item 添加很多回调。
  • 您好,感谢您的反馈。我已经实例化了所有视图和侦听器,也很抱歉我忘记在其中添加我的 return 语句,但问题仍未解决