java - 访问android中重写方法的参数的子方法?

标签 java android overriding downcast

这肯定是一个菜鸟问题,但我找不到适当的等待来实现以下目标:

在android中,我创建了一个子类MyView来扩展View类。在 B 中,我定义了 View 类中不存在的方法 mMethod。

现在,我想在 MyView 上设置一个 OnClickListener 接口(interface)。为此,我必须在定义新的 OnClickListener 时重写 onClick 方法。此外,我想访问 onClick 中的 mMethod 方法,但重写的方法需要一个 View 类实例,而不是 MyView 的实例。那我能做什么呢?

更准确地说:

public class MyView extends View{
  ...
    public void mMethod(){
    ...
    }
}

并且在主类(Activity)中

MyView  myView = new MyView () 
//It's not the correct constructor, but it's not the point

myView.setOnClickListener(new OnClickListener(){

    @Override
    public boolean onClick(View v){
        //Here I would like to access mMethod of MyView
        ???
    }

}

使用myView.mMethod()是唯一的解决方案吗?是否可以将 v 向下转换为 (MyView)v ?如果是这样,该怎么办?我应该定义一个子接口(interface)吗?

谢谢!

最佳答案

那么,你可以使用:

public boolean onClick(View v) {
    MyView mv = (MyView) v;
    mv.myMethod();
}

这样你就知道你正在操作正确的 View - 如果你得到错误类型的 View ,它会抛出异常。 (如果您不想引发异常,可以使用 instanceof 首先测试它是否是正确的 View 类型。)

关于java - 访问android中重写方法的参数的子方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4255768/

相关文章:

java - Rails 和 Java 上的 Angular 和 Rest 服务之间的 session

java - 我需要使用 Apache POI 在 Excel 工作表上的 Java 中迭代到列的末尾

android - 根据 ViewPager Android 显示菜单项

python - 在创建django时添加注册

Android:覆盖 shouldOverrideUrlLoading 在 HTC 设备上不起作用

java - 避免直接从同一个类访问私有(private)属性

Java 安全异常无效的 SHA1 Jar 文件

Java 的 toString 方法未被重写

android - 向 RelativeLayout 动态添加按钮无法正常工作

java - 通过编辑文本过滤结果