当用户点击视图时,SupplementalInterface
方法如何被触发,onClick
是一个接口对吗?它没有定义方法的工作方式。
我理解它可以让程序员在调用OnclickListener
方法时自由定义它自己的动作,但是当用户点击视图时该方法是如何调用的?当接口中有多个方法时如何工作?
据我所知,它比java问题更基本的java问题。但是我很长时间以来都怀疑过这个问题。希望以某种方式解释我是如何运作的。
onClick
答案 0 :(得分:0)
这是一种回调机制。你需要定义一个实现OnclickListener接口的具体类。这就是你在像这样的
视图上setOnClickListener时所做的Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
});
您正在定义一个实现OnClickInterface的匿名内部类。 您还可以定义另一个实现OnClickInterface的Custom类,并在setOnClickListener中设置该类。
当您设置监听器时,为了理解您可以看到该按钮将在其中引用您的类
例如:
public class Button extends TextView {
OnClickInterface mCallBack;
void setOnClickListener (OnClickInterface in) {
mCallBack = in;
}
void clicked(){
in.onClick(this);
}
}
只要单击该按钮,它就会调用接口实现的onclick方法,为其提供视图
希望它有助于
答案 1 :(得分:0)
Java中的接口是一个契约,它包含了希望支持合同的类必须实现的方法的签名。
public interface OnClickListener
{
void onClick(View v);
}
实现OnClickListener
的类必须实现方法onClick(View v)
。例如 -
public class LogListener implements OnClickListener
{
private final Logger logger;
LogListener(Logger logger) { this.logger = logger; }
void onClick(View v) { logger.log("View Clicked!"); }
}
无法构造接口,它只能引用接口实现的实例 -
OnClickListener listener = new LogListener(logger);
调用listener.onClick
时,引用对象的实现在运行时获取 - 在本例中为LogListener.onClick
。
Android框架希望支持一种方式,即视图会提示他们已被点击,以便程序员能够处理点击,因此他们提供了一种方法setOnClickListener
,可以获取实现OnClickListener的任何对象保留引用对它,当单击按钮时,将调用onClick方法。
此模式称为Observer Pattern。
答案 2 :(得分:0)
当我开始学习android时,我遇到了同样的问题。当按下按钮时,我没有直接调用onClick方法。每个东西都是由android完成的。当我们第一次调用setOnclickListener时,它会设置信息监听器。这里有setOnClickListener方法的源代码。
sendmail_path = "sendmail -t -i"
我们有一个方法performAccessibilityActionInternal当我们按下屏幕时调用它,如果动作是单击它将调用performClick方法,这个perfromClick方法将调用监听器的onClick方法 这是performClick方法
public void setOnClickListener(OnClickListener l)
{
if (!isClickable())
{
setClickable(true);
}
getListenerInfo().mOnClickListener = l;
}
有关详细信息,请参阅Android开源代码here