Android学习之View.OnClickListener接口中onClick(View var1)方法参数问题

tech2025-12-29  6

项目场景:

推荐一个up主分享的Anroid学习的视频,感谢up主的知识分享。

https://www.bilibili.com/video/BV1Rt411e76H?t=334&p=8

版本:Android studio 4.0.1


问题描述:

在跟随大佬的学习过程中,大佬将重复的代码整合封装的过程中我不禁产生了下面的疑惑

public void onClick(View view)中的view参数是谁?哪来的?

public class MainActivity extends AppCompatActivity {     private Button mBtn1,mBtn2,mBtn3,mBtn4;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         mBtn1 = findViewById(R.id.btn_1);//最新版本的Android studio采用了泛化省去了类型转换         mBtn2 = findViewById(R.id.btn_2);         mBtn3 = findViewById(R.id.btn_3);         mBtn4 = findViewById(R.id.btn_4);         setListener();     }     private void  setListener(){         OnClick onClick=new OnClick();         mBtn1.setOnClickListener(onClick);         mBtn2.setOnClickListener(onClick);         mBtn3.setOnClickListener(onClick);         mBtn4.setOnClickListener(onClick);     }     private class OnClick implements View.OnClickListener {         @Override         public void onClick(View view) {             Intent intent=null;             switch (view.getId()){//这个view哪里来的?                 case R.id.btn_1:                     intent=new Intent(MainActivity.this,MainActivityTest1.class);                     break;                 case R.id.btn_2:                     intent=new Intent(MainActivity.this,MainActivityTest1.class);                     break;                 case R.id.btn_3:                     intent=new Intent(MainActivity.this,MainActivityTest1.class);                     break;                 case R.id.btn_4:                     intent=new Intent(MainActivity.this,MainActivityTest1.class);                     break;             }             startActivity(intent);         }     } }

原因分析:

我找到setOnClickListener()方法,发现其位于View类下,发现其就抛了个异常出来???

public void setOnClickListener(@Nullable View.OnClickListener l) { throw new RuntimeException("Stub!"); }

再看View.OnClickListener接口,其onClick(View var1)方法明显需要传一个View 类型的参数过来,问题是哪来的呢?

public interface OnClickListener { void onClick(View var1); }

 


解决方案:

查了一下Android 的API,找到的结果如下,这意思是谁被点击了,参数view就是谁,可以理解为参数绑定,至于怎么绑定的就不会知道了,上面也没说,暂时就不深究了。

Parameters//参数v指的是那个被点击的view

vThe view that was clicked.

最新回复(0)