3

这似乎是一个基本问题,所以我确定这是我忽略的小问题。也许我只是看了太久。

我一直在尝试在视图中创建一个 onClick 侦听器,并且我有一个公共的 set 方法来设置侦听器。但是当我尝试在类之外调用该方法时,我收到一条错误消息,指出它无法解析该方法。

我已经尝试创建其他公共方法或公共成员变量,但由于某种原因我无法在类之外查看它们中的任何一个。

以下是一些相关片段:

PaintView:(我无法从中获取公共成员的类)

public class PaintView extends View {
    public interface OnPaintClickedListener
    {
        public void onPaintClicked(int color);
    }
    private OnPaintClickedListener _onPaintClickedListener;

    public void setOnPaintClickedListener(OnPaintClickedListener listener)
    {
        _onPaintClickedListener = listener;
    }
...
}

PaletteView:(使用 PaintView 的类)

public class PaletteView extends ViewGroup {
....
    public void addColor(Context context, int color)
    {
        View newPaintView = new PaintView(context, color);

        //setOnPaintClickedListener gives the message "Cannot resolve method setOn...blah blah'
        newPaintView.setOnPaintClickedListener(new PaintView.OnPaintClickedListener()
        {
            @Override
            public void onPaintClicked(int color)
            {

            }
        });
        this.addView(newPaintView);
    }
}

接口代码没问题,但它只能找到 setOnPaintClickedListener 方法。

在此先感谢,我有 97% 的把握,一旦有人指出我的错误,我就会觉得自己像个白痴。

4

1 回答 1

4

改成:

PaintView newPaintView = new PaintView(context, color);

解释...由于您使用的变量是用View类型声明的,编译器无法找到子类PaintView中定义的方法,因此它会抱怨。

或者,您可以保留相同的声明,并且在调用特定方法时,您必须像这样强制转换为子类:

((PaintView)newPaintView).setOnPaintClickedListener

于 2013-09-21T21:49:04.690 回答