Skip to content

事件中心

Drowning Coder edited this page Nov 14, 2018 · 1 revision

事件中心的核心思想就是组件只是事件的传递者,不是事件的处理者,也就是楼层只是一个壳,今天可以做事件A,明天可以做事件B。

用法

1.ViewHolder实现InjectCallback,注入事件中心实体

@ComponentType(
        value = 0,
        layout = R.layout.single_text,
        attach = Text.class
)
public class TextVH extends Component<Text> implements InjectCallback {
    private TextView tv;
    private View.OnClickListener onClickListener;

    public TextVH(Context context, View itemView) {
        super(context, itemView);
        tv = (TextView) itemView;
    }

    @Override
    public void onBind(int pos, Text item) {
        tv.setText(item.title);
        //将事件类型和事件所需要的参数通过View.setTag传出。
        tv.setTag(item.eventId);
        tv.setOnClickListener(onClickListener);
    }

    @Override
    public void onUnBind() {

    }

    @Override
    public void injectCallback(View.OnClickListener onClickListener) {
        this.onClickListener = onClickListener;
    }
}

2.实现EventCenter

public class MagicEventCenter implements View.OnClickListener {
@Override
    public void onClick(View v) {
        //防止快速点击
        if (isFastDoubleClick()) return;
        //统一处理埋点
        //处理Glide图片点击
        //处理常规View点击
}
}

3.ToolKitBuilder.setEventCenter()绑定事件中心

public ToolKitBuilder<T> setEventCenter(View.OnClickListener onClickListener) {
        this.eventCenter = onClickListener;
        return this;
    }