我有一个 RecyclerView (带有 LinearLayoutManager )和一个自定义的 RecyclerView.ItemDecoration 。
比方说,我想在装饰视图中添加按钮(出于某种原因..)。
我用按钮填充布局,它正确绘制。但我无法使按钮可点击。如果我按下它,什么也不会发生(它保持不变,没有按下效果)并且 onClick 事件不会触发。
ItemDecoration布局的结构是
<LinearLayout>
<TextView/>
<Button/>
</LinearLayout>
我正在尝试在装饰的 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.
}
});
}
}
我正在 onDrawOver 方法中绘制装饰。 (实际上,我正在修改这个代码库:https://github.com/edubarr/header-decor https://github.com/edubarr/header-decor )
有任何想法吗?可行吗?
Thanks!
虽然真正的标题滚动到屏幕之外,但可见的标题是直接在画布上绘制的,这与普通的交互式小部件不同。
你有这些选择
- 重写 RecyclerView.onInterceptTouchEvent(),尽管有一些侵入性,所以我更喜欢下一个。
- 使用 RecyclerView.addOnItemTouchListener(),记住运动事件参数已转换为 RecyclerView 的坐标系。
- 使用真正的标题视图,但我认为这会有点远。
如果您采用选项 1/2,Button.setPressed(true) 并重绘标题将具有视觉按下效果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)