Android处理点击事件

时间:2011-12-01 22:34:23

标签: java android events

我有两个问题,如果你扩展了一个视图,你的新视图是MyView extends View,而MyView有自定义方法和变量,你如何在onClick上访问这些方法和变量?

如果

MyView mv = new MyView()
mv.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // CANNOT access MyView since v is a View and not MyView?

    }
}); 

5 个答案:

答案 0 :(得分:1)

您确定了最终关键字,然后您就可以在mv上调用方法。

final MyView mv = new MyView()
mv.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        mv.myFunction();

    }
}); 

答案 1 :(得分:1)

  1. 您可以将输入视图(这不是我最喜欢的选项)转换为 你的MyView课程。
  2. 您可以将MyView mv变量设为final并在匿名内部类中访问它。
  3. 或者您可以将OnClockListener从匿名内部类中分离出来 嵌套类并将MyView设置为参数
  4. 示例:

    MyView mv = new MyView();
    MyOnClickListener listener = new MyOnClickListener(mv);
    mv.setOnClickListener(listener);
    
    ...
    
    public class MyOnClickListener implements View.OnClickListener{
        private MyView mv;
    
        public MyOnClickListener(MyView mv){
            this.mv = mv;
        }
    
        @Override
        public void onClick(View v) {
            mv.doSomething();
        }
    }
    

答案 2 :(得分:0)

以这种方式使用关键字super

super.myParentMethod()

父方法和变量/访问器方法必须至少protected才能访问它们。它们不能是private

答案 3 :(得分:0)

简单。

mv.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
    // Just check whether the view is of your type or not.
    // If you are sure its gonna be MyView you can skip it
    if( v instanceof MyView) {
       MyView mv = (MyView)v;
       mv.yourCustomMethod();
    }

  }
}); 

答案 4 :(得分:0)

您需要将View v转换为MyView才能调用自己的方法。

@Override
public void onClick(View v) {
    MyView mv = (MyView)v;
    mv.myMethod();
}