无法在Java中访问View对象(Android)的公共方法

时间:2013-09-21 21:44:39

标签: java android

这似乎是一个基本问题,所以我确信这是我忽略的小事。也许我刚看了太长时间。

我一直在尝试在视图中创建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%的确定,只要有人指出我的错误,我就会觉得自己像个白痴。

1 个答案:

答案 0 :(得分:4)

更改为:

PaintView newPaintView = new PaintView(context, color);

解释...当你使用的变量用 View 声明时,编译器无法找到子类 PaintView 中定义的方法,所以它抱怨。

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

((PaintView)newPaintView).setOnPaintClickedListener