gpt4 book ai didi

java - 使用匿名内部类 - 添加监听器和传递实例时发生冲突

转载 作者:行者123 更新时间:2023-12-01 22:45:42 24 4
gpt4 key购买 nike

我是 android 新手,第一次学习。

我正在制作一个非常简单的 fragment ,例如当用户单击按钮时,应用程序应该显示一条 Toast 消息。

我在网上阅读了很多教程。我在网上看到的所有教程都使用 anonymous inner class实现listeners以及他们的方法。

我尝试过的在这里:

public class MainActivity extends Activity {

private Button mTrue;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mTrue= (Button) findViewById(R.id.turebutton);


mTrue.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

Toast.makeText(MainActivity.this, R.string.correct_toast,Toast.LENGTH_LONG).show();

}
});

}

它工作得很好,但似乎很难理解。

我熟悉 Java 基础知识。我已阅读this我已经知道 inner classanonymous inner classjava

java ,如果我们编写类似此示例的代码,

public void init(){
addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent me){
showStatus("mouse pressed");
}
});
}

MouseListener是一个接口(interface),然后我们创建 MouseAdapter 的实例并将其传递给调用 Listener的方法。

我有一些问题:

  1. 为什么我们在这里传递了接口(interface)( View.onClickListener )的实例?..我已经检查了文档, View.onClickListener是接口(interface)而不是类。

  2. setonClickListener看起来和 addMouseListener 一样。但矛盾的是在java中,我们必须 add听众和pass类的实例。这里事情是相反的。

我完全连线了。如果有人能解释清楚,请帮忙。提前致谢。

最佳答案

    mTrue.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

Toast.makeText(MainActivity.this, R.string.correct_toast,Toast.LENGTH_LONG).show();

}
});

此处您将传递一个实现 View.OnClickListener() 接口(interface)的匿名类的实例。

View 类的 setOnClickListener 方法接受 View.OnClickListener 类型的参数。因此,提供一个实现此接口(interface)的实例是可行的。

至于addMouseListener,假设您指的是this method Component 的,它也接受一个接口(interface) - MouseListener

但是,在您的示例中:

public void init(){
addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent me){
showStatus("mouse pressed");
}
});
}

您正在向其传递一个继承自 MouseAdapter 的匿名类的实例,该类本身实现了 MouseListener 接口(interface)。

因此,这两个示例非常相似。

关于java - 使用匿名内部类 - 添加监听器和传递实例时发生冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25407657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com