Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Consider: Do we need position? #36

Closed
drakeet opened this issue Nov 17, 2016 · 4 comments
Closed

Consider: Do we need position? #36

drakeet opened this issue Nov 17, 2016 · 4 comments

Comments

@drakeet
Copy link
Owner

drakeet commented Nov 17, 2016

As the issue #35 request, I began to think about this issue, a position may be more convenient.

@drakeet drakeet added this to the v2.2.2 milestone Nov 17, 2016
@drakeet
Copy link
Owner Author

drakeet commented Nov 20, 2016

My conclusion is: No.

If an Items container has many types of Items, our position would be meaningless. Because it should be in the same position, so it could makes sense.

And if you really need a position param, my suggestion is that: You can extend MultiTypeAdapter and ItemViewProvider to achieve. It will serve as a concrete use case.

@drakeet
Copy link
Owner Author

drakeet commented Nov 20, 2016

Chinese version:
"我们是否需要传递 position 到 provider 层面?"

我觉得是不需要,首先几乎所有需要 position 的需求,都可以 以不需要 position 的方式实现;其次,position 造成了耦合、对外依赖;而且,因为我们的 Items 容器中可能有多种类型的 items,如果直接取在 Items 中的位置,这是没有意义的,我们需要的是它们在同类中的位置;最后,如果你实在需要 position,完全可以通过继承源码来实现,MultiType 几乎所有的部件都是可拓展可替换的,我们不应该直接去修改源码。

@drakeet
Copy link
Owner Author

drakeet commented Dec 8, 2016

上次说到 MultiType 是否需要给 ViewProvider 传递 position 的事情,我找到了许多理由来支持"不需要",但实际上有一种情况下很可能是需要的,就是当 item type 只有一种的时候,于是我继承了 MultiTypeAdapter 非常容易地自行传递了 position,如图。position 主要用于判断是否是第一个 item,如果是,将 item 的顶部加上圆角度数。

snip20161208_6

@drakeet drakeet removed the wontfix label Dec 8, 2016
@drakeet
Copy link
Owner Author

drakeet commented Dec 8, 2016

最终,在 2.3.0 加入了获取 position 接口方法:

/**
 * Get the adapter position of current item,
 * the internal position is equals RecyclerView.ViewHolder#getAdapterPosition().
 *
 * @return the adapter position
 * @since v2.3.0
 */
protected final int getPosition() {
    return position;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant