使用OnItemTouchListener在recyclerview中的可触发项目

时间:2017-03-21 21:22:05

标签: android android-recyclerview

初始声音

这可能不是最好的主意,但这是我想要做的4秒GIF以及我遇到的问题。

https://i.imgur.com/Z3iAyNc.gifv(抱歉,不允许嵌入)。

我在每个项目中都有一个RecyclerView,其中LinearLayout包含类别详细信息,隐藏LinearLayout包含另一个recyclerView。这个想法是你看到类别,一旦你点击它,它会扩展以显示相关的帖子。再次点击该类别应打开类别详细信息页面,点击帖子应打开相关的帖子详细信息页面。

我有它工作,但正如你在gif中看到的那样,我必须至少敲击两次,即使我从未这样写过。对于LinearLayout的onClickListener,它是相同的。就像父RecyclerView劫持第一次点击一样。

这是我的代码

的示意图
    adapter.setOnItemTouchListener(new RecyclerItemListener.RecyclerTouchListener() {
        @Override
        public void onClickItem(View v, int position) {
            final LinearLayout postView = (LinearLayout) v.findViewById(R.id.profileCheckinDetailsView);
            // The IF statement prevents reloading the view when it is already open.
            if (postView.getVisibility()==View.GONE){
                RelativeLayout itemView = (RelativeLayout) v.findViewById(R.id.ItemView);
                itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
[... etc]

在其下方还有另一个setOnItemTouchListener给孩子RecyclerView

我这样做是否正确,如果是这样,如何确保这两个项目同时注册?

提前致谢!

1 个答案:

答案 0 :(得分:1)

The layout

有时输入一个问题有助于您以不同的方式思考。我删除了顶级的recyclerview的触摸侦听器,并用此替换了项目布局。两种布局都有自己的onClickListener。 ((LinearLayout)v.getParent())我设法让他们互相控制。

我相信更轻松,更有效。