Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现接口OnClickListener_Java_Android_Xml_Onclick_Onclicklistener - Fatal编程技术网

Java 实现接口OnClickListener

Java 实现接口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;

**编辑:**

我问这个问题的主要原因是下面的代码,它实现了OnClickListener,但没有设置新的OnClickListener,而是将上下文作为参数传递给OnClickListener

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中注册的方法必须具有param
View 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中注册的方法必须具有param
View v
。啊,好的。当您使用
android:onClick
属性时,
LayoutInflater
使用反射来访问
活动中的指定方法,然后在
按钮上设置一个仅通过反射调用该方法的通用
OnClickListener
活动
不需要为此实现接口。内部
LayoutInflater
对象就是
OnClickListener
。至于使用两者的代码,这是多余的,而且可能他们只是忘记了XML属性。但是,代码中设置的应用程序会覆盖布局中的应用程序,即使它们在此处使用相同的方法。当前建议使用androidx,除非您有一些真正基本的应用程序,只能使用未弃用的平台类
AppCompatActivity
仍在androidx中,使用起来非常方便。当他们迁移时,几乎所有东西的基本名称都保持不变;现在一切都在androidx里了。如果您在最近的Android Studio版本中创建一个新项目,默认情况下它将使用androidx。