自定义视图上的Onclicklistener无法正常工作

问题描述 投票:0回答:2

我有一个自定义视图:

public class GalleryView extends View implements View.OnClickListener {

    private CallBackHandler callBackHandler;
    Paint myPaint = new Paint();

    public GalleryView(Context context, CallBackHandler callBackHandler) {
        super(context);
        this.callBackHandler = callBackHandler;
    }

    public GalleryView(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        myPaint.setColor(Color.RED);
        canvas.drawPaint(myPaint);
    }

    @Override
    public void onClick(View view) {
        System.out.println("clicked !");
        callBackHandler.do();
    }
}

我将此添加到我的主要活动的linearLayout中:

linearLayout.addView(galleryView);

我将布局设置为我的contentview:

setContentView(linearLayout);

我可以看到红色视图,但不会触发点击。

这有什么不对?

android view onclicklistener
2个回答
0
投票

您可以通过简单地设置OnClickListener来实现,如下所示:

public class GalleryView extends View implements View.OnClickListener {

    Paint myPaint = new Paint();
    private CallBackHandler callBackHandler;

    public GalleryView(Context context, CallBackHandler callBackHandler) {
        this(context, null, callBackHandler);
    }

    public GalleryView(Context context, AttributeSet attributeSet, CallBackHandler callbackHandler) {
        super(context, attributeSet);
        this.callBackHandler = callbackHandler;
        initialize();
    }

    private void initialize() {
        setOnClickListener(this);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        myPaint.setColor(Color.RED);
        canvas.drawPaint(myPaint);
    }

    @Override
    public void onClick(View view) {
        System.out.println("clicked !");
        callBackHandler.do();
    }
}

2
投票

你需要在create上添加这一行:

yourView.setOnClickListener(this);

基本上,当你添加这一行时你使用OnClickListenersetOnClickListener(this)分配给你的视图,而这就是在onClick内部,调用指定的OnClickListener的onClick。

© www.soinside.com 2019 - 2024. All rights reserved.