gpt4 book ai didi

android - RecyclerView 与 GridLayoutManager 插入项目错误位置

转载 作者:搜寻专家 更新时间:2023-11-01 08:41:26 26 4
gpt4 key购买 nike

我在使用 GridLayoutManager 和 2 个跨度的 RecyclerView 中看到奇怪的行为。

我正在尝试获取两列项目:

0 1
2 3
4 5
6 7

...等等

为此,我创建了一个 GridLayoutManager,如下所示:

    GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 2);
gridLayoutManager.setOrientation(GridLayoutManager.VERTICAL);

最初这表现得很好。我的项目按照我希望的顺序出现。

但是,我还需要能够从列表中删除项目,然后在用户操作足够快时撤消删除。

要删除项目然后允许撤消/插入项目,我在用户点击 RecyclerView 项目中的“删除”按钮时执行以下逻辑。

    final Item = mItems.getItem(position);
mItems.remove(position);
notifyItemRemoved(position);

// Give the user a chance to undo the removal
Snackbar.make(getView(),
"Item Removed", Snackbar.LENGTH_LONG)
.setAction(R.string.item_removed_snackbar_undo, new View.OnClickListener()
{
@Override
public void onClick(View view)
{
mItems.add(position, item);
notifyItemInserted(position);
}
}).show();

mItems 表示我的适配器中的项目列表。 position 表示单击删除按钮的项目的适配器位置。

删除项目的行为非常完美。我能够删除项目,并且项目动画以填充空白区域。但是,当我尝试撤消删除并重新添加项目时,回收器 View 变得困惑并且插入了空白空间。例如,如果我有以下项目,我删除了项目 2,然后取消删除,这就是会发生的情况:

0 1
2 3

删除 2

0 1
3

加2个

0 1
2
3

此时,一个“空” View 存在于应放置 3 的位置(第二行,第二列)。如果我查询适配器的大小,我仍然得到 4 个项目,但不知何故这些项目被分散到总共 5 个位置。触摸空白区域没有任何作用,但如果我重新定向/配置更改布局,则会返回到

0 1
2 3

正如预期的那样。

我做错了什么吗?

谢谢,扎克

最佳答案

我发现了问题!

我在重新插入项目的逻辑之后调用 mRecyclerView.scrollToPosition(position)。我错误地从上面的代码中删除了这一部分,因为我认为它不相关(以后我会更加小心)。

无论如何,调用这个函数似乎会导致奇怪的行为。如果我删除了那个电话,一切都会按预期进行。我怀疑它取消了动画或导致其他东西无法正常工作。

现在我仍然想让我的项目可见(以防用户删除它,滚动它使其离开屏幕,然后点击撤消),但我稍后会解决这个问题 - 现在这已经足够了。

关于android - RecyclerView 与 GridLayoutManager 插入项目错误位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32211800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com