如何处理RecyclerView.ItemDecoration中的点击事件?

Kon*_*nov 12 android android-viewholder android-recyclerview

我有一个RecyclerView(带有LinearLayoutManager)和一个自定义的RecyclerView.ItemDecoration.

让我们说,我想在装饰视图中有按钮(出于某种原因......).

我用按钮给布局充气,它画得很好.但我不能使按钮可点击.如果我按下它,没有任何事情发生(它保持不变,没有按下效果)并且onClick事件没有触发.

ItemDecoration布局的结构是

<LinearLayout>
  <TextView/>
  <Button/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

而我正试图在ViewHolder中设置侦听器的装饰

class ItemDecorationHolder extends RecyclerView.ViewHolder {
    public TextView header;
    public Button button;

    public HeaderHolder(View itemView) {
        super(itemView);

        header = (TextView)itemView.findViewById(R.id.header);
        button = (Button)itemView.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //.. Show toast, etc.
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在onDrawOver方法中绘制装饰.(实际上,我正在修改此代码库:https://github.com/edubarr/header-decor)

有任何想法吗?它可行吗?

谢谢!

Nei*_*eil 8

当真实标题滚动离开屏幕时,可见标题直接在画布上绘制,而不是像普通的交互式小部件.

你有这些选择

  1. 覆盖RecyclerView.onInterceptTouchEvent()虽然具有一定的侵入性,所以我更喜欢下一个.
  2. 利用RecyclerView.addOnItemTouchListener(),记住运动事件参数已被翻译成RecyclerView的坐标系.
  3. 使用真正的标题视图,但我想这会有点远.

如果选择1/2,Button.setPressed(true)并重绘标题将具有视觉效果.

  • 在这种情况下,它将点击整个标题。如果我想单击标题上的特定位置,请提出建议。 (2认同)