【问题标题】:RecyclerView and get ItemIdRecyclerView 并获取 ItemId
【发布时间】:2020-03-25 11:18:45
【问题描述】:

我正在使用RecyclerViewItemTouchHelper 实现滑动删除。在我的onSwiped 函数中,我调用我的服务以通过 API 请求删除元素,但为此我需要适配器给我元素的 ID。 我覆盖了适配器的getItemId() 函数

@Override
public long getItemId(int position) {
   return dataSet.get(position).getId();
}

但是,当我在 onSwiped 函数中使用它时

@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
     AddBaseService addBaseService = AddBaseService.sharedInstance();
     long baseId = viewHolder.getItemId(viewHolder.getAdapterPosition());
     addBaseService.deleteBase(String.valueOf(baseId));

我在getAdapterPosition 行出现错误提示

getItemId() in ViewHolder cannot be applied to (int)

虽然 getAdapterPosition 应该返回一个 int :/

【问题讨论】:

    标签: android adapter


    【解决方案1】:

    编辑:

    这里有两个链接可以帮助您解决问题:


    OP 使用:adapter.getItemId(viewHolder.getAdapterPosition()); 而不是viewHolder.getItemId() 来解决他的问题。

    【讨论】:

    • 我的问题不在于如何在适配器中设置滑动和删除。我知道如何做到这一点,它的工作原理。我唯一的问题是获取项目的 ID。由于某些原因,它似乎没有调用该函数。它总是返回 -1
    • 在这种情况下,有一些关于 SO 的主题可能会对您有所帮助,例如 stackoverflow.com/questions/6711592/…stackoverflow.com/questions/41919116/…
    【解决方案2】:

    我认为 viewHolder.getItemId() 期望 long 不是 int

    【讨论】:

    • 我试了很长时间,我得到了同样的消息getItemId() in ViewHolder cannot be applied to (long)
    • 嘿,我认为你的意思是 viewHolder.setItemId() :/ 因为 viewHolder.getItemId 实际上并不期望任何东西 :D
    • 我首先尝试过这种方式,但由于某些原因,它总是返回-1,当我在函数 getItemId() 中放置断点时,它似乎从未被调用过:/
    • 也许你在删除它之后传递了视图的 id,所以它永远不存在,我之前没有实现 swip-delete 但如果你想要一种找到视图的方法更好地使用标签
    猜你喜欢
    • 2021-09-27
    • 2014-08-15
    • 2014-03-19
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 2016-02-05
    相关资源
    最近更新 更多