我有两个问题,如果你扩展了一个视图,你的新视图是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?
}
});
答案 0 :(得分:1)
您确定了最终关键字,然后您就可以在mv上调用方法。
final MyView mv = new MyView()
mv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mv.myFunction();
}
});
答案 1 :(得分:1)
示例:
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();
}