【问题标题】:How can I determine which button was clicked within a recycleview/cardview?如何确定在回收视图/卡片视图中单击了哪个按钮?
【发布时间】:2014-10-24 19:03:05
【问题描述】:

参考 Jacob Tabok 的帖子 here,我在 Fragment 的 onCreateView 中添加了一个 OnItemTouchListener:

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_recyclerview, container, false);
    mRecyclerView = (RecyclerView) view.findViewById(R.id.list_recylclerview);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(_context));
    mRecyclerView.setItemAnimator(new DefaultItemAnimator());
    mRecyclerView.addOnItemTouchListener(
            new RecyclerItemClickListener(_context, new RecyclerItemClickListener.OnItemClickListener() {
                @Override public void onItemClick(View view, int position) {
                    logger.i("onitemClick");
                }

            })
    );

我完全不知道如何使用建议的做法来确定我的卡片视图中的哪个按钮被点击了。问题是返回整个卡片视图而不是我单击的项目,如here 所示。

如何确定点击了哪个按钮?我想避免这个post 中的观众建议,因为我正在做很多片段交易

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

    你必须实现Activity - Fragment - RecyclerView.Adapter 通信。 (通过接口模式进行片段通信)

    您应该使用一个接口进行 fragment-recyclerview.Adapter 通信,而另一个接口用于 activity-fragment 通信。

    有一个很好的例子(github)如何实现recyclerview但没有碎片

    antoniolg - RecyclerViewExtensions


    有我的带有蓝色背景 cmets (todo) 的代码截图,因此您可以遵循代码流,我使用 LongClick 而不是 Click,我的 ViewModel 类是 Friend/User,我有两个分离的列表视图,所以当有人点击用户时将迁移到好友列表,反之亦然。




    如果我的解释有问题,请纠正我,因为我也在学习 Android。

    【讨论】:

    • 我最终通过适配器执行此操作,因为它在 viewholder 类中提供了一个 getPosition 方法。我确信接口解决方案可以正常工作,但要编写更多代码。
    • 是的,但是在您了解对象之间的接口通信的概念之后,您将大部分时间使用复制粘贴旧代码并更改特定项目所需的内容。跨度>
    • 完全同意,对象(尤其是片段)之间的接口通信非常有用。感谢您的回答!
    • 尝试使用 Square Otto (event-bus) 我的示例:我有两个带有 recyclerviews 的片段,当我按下第一个列表项时,该项目将移动到第二个片段的 recyclerview(您应该注册和取消注册总线在您使用总线的任何地方)deviantpics.com/images/2015/01/15/otto.png
    猜你喜欢
    • 1970-01-01
    • 2020-12-18
    • 2016-06-16
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 2018-09-10
    • 2011-03-18
    • 1970-01-01
    相关资源
    最近更新 更多