Java 实现接口OnClickListener
**编辑:** 我问这个问题的主要原因是下面的代码,它实现了OnClickListener,但没有设置新的OnClickListener,而是将上下文作为参数传递给OnClickListenerJava 实现接口OnClickListener,java,android,xml,onclick,onclicklistener,Java,Android,Xml,Onclick,Onclicklistener,**编辑:** 我问这个问题的主要原因是下面的代码,它实现了OnClickListener,但没有设置新的OnClickListener,而是将上下文作为参数传递给OnClickListener public class MainActivity extends Activity implements View.OnClickListener { ImageSwitcher imageSwitcher; Button btnPrevios, btnNext;
public class MainActivity extends Activity implements View.OnClickListener {
ImageSwitcher imageSwitcher;
Button btnPrevios, btnNext;
int[] LOGO = { R.drawable.barca, R.drawable.psg, };
int currentIndex = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnPrevios = //.......; btnNext = //.....;
btnPrevios.setOnClickListener(this);
btnPrevios.setOnClickListener(this);
imageSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher);
imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
@Override
//.......
});
}
public void onClick(View view) {
switch (view.getId()){
case R.id.btnNext:
if(currentIndex<LOGO.length-1){
currentIndex = currentIndex+1;
imageSwitcher.setBackgroundResource(LOGO[currentIndex]);
}
break;
}
}
但他们都没有使用
setOnClickListener(new onClickListener);
正如皮罗所说
他们做到了
Public void onClick(View v){
//sth
}
**与我的方法相比,这要么令人困惑,要么更像是重言式
我好像错过了什么**
Xml onClick在代码中是如何工作的,还是我遗漏了什么。我确实是这样写我的onClick方法的
Public void onClick(View v){
//sth
}
public class MainActivity extends Activity implements View.OnClickListener{
//.......
button.setOnClickListener(this);
}
Public void onClick(View v){
//sth
}
在扩展活动类之后,不实现接口View.OnClickListener,它确实工作得很好
但最近我看到了这样的事情
Public void onClick(View v){
//sth
}
public class MainActivity extends Activity implements View.OnClickListener{
//.......
button.setOnClickListener(this);
}
Public void onClick(View v){
//sth
}
请问实现接口视图的目的是什么。OnClickListener因为我仍然必须像在xml中一样声明onClick=“onClick”。如果您已经在代码中实现并设置了
OnClickListener
,您不需要布局XML中的android:onClick
属性该活动将不会实现View.OnClickListner,而是指向一个要执行的方法。它可以是任何内容,而不仅仅是onClick Only,只是添加到Mike M的注释中,您还需要执行setOnClickListener(onClickListener)
在任何地方使用它,并从AgentP注释在XML中注册的方法必须具有paramView v
。啊,好的。当您使用android:onClick
属性时,LayoutInflater
使用反射来访问活动中的指定方法,然后在按钮上设置一个仅通过反射调用该方法的通用OnClickListener
。活动
不需要为此实现接口。内部LayoutInflater
对象就是OnClickListener
。至于使用两者的代码,这是多余的,而且可能他们只是忘记了XML属性。但是,代码中设置的应用程序会覆盖布局中的应用程序,即使它们在此处使用相同的方法。当前建议使用androidx,除非您有一些真正基本的应用程序,只能使用未弃用的平台类AppCompatActivity
仍在androidx中,使用起来非常方便。当他们迁移时,几乎所有东西的基本名称都保持不变;现在一切都在androidx里了。如果您在最新的Android Studio版本中创建了一个新项目,默认情况下它将使用androidx。如果您已经在代码中实现并设置了OnClickListener
,则不需要在布局XML中使用Android:onClick
属性。只需将Android:onClick=“onClick”该活动将不会实现View.OnClickListner,而是指向一个要执行的方法。它可以是任何内容,而不仅仅是onClick Only,只是添加到Mike M的注释中,您还需要执行setOnClickListener(onClickListener)
在任何地方使用它,并从AgentP注释在XML中注册的方法必须具有paramView v
。啊,好的。当您使用android:onClick
属性时,LayoutInflater
使用反射来访问活动中的指定方法,然后在按钮上设置一个仅通过反射调用该方法的通用OnClickListener
。活动
不需要为此实现接口。内部LayoutInflater
对象就是OnClickListener
。至于使用两者的代码,这是多余的,而且可能他们只是忘记了XML属性。但是,代码中设置的应用程序会覆盖布局中的应用程序,即使它们在此处使用相同的方法。当前建议使用androidx,除非您有一些真正基本的应用程序,只能使用未弃用的平台类AppCompatActivity
仍在androidx中,使用起来非常方便。当他们迁移时,几乎所有东西的基本名称都保持不变;现在一切都在androidx里了。如果您在最近的Android Studio版本中创建一个新项目,默认情况下它将使用androidx。