Android 处理点击事件

3

我有两个问题,如果您扩展了一个视图(View),使得您的新视图是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个回答

1

你需要使用final关键字,然后就可以在mv上调用方法了。

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

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

    }
}); 

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

例子:

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();
    }
}

谢谢,我发誓我试过了,但可能没有成功。这就是我在感冒的情况下编程的后果。 - esse

0

在编程中,使用关键字super的方法如下:

super.myParentMethod()

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

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();
    }

  }
}); 

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接